2

ショートカットの正しいランチャー アイコン サイズを見つけるのに問題があります。

私の Nexus 7.2 では、android.R.dimen.app_icon_size (コードを参照) の値は 96 ピクセルです。しかし、ホーム画面のスクリーンショットで他のアプリの実際のアイコン サイズを測定すると、120 ピクセルです。ショートカットを作成すると、他のすべてのアプリ アイコン (120 ピクセル) よりも小さくなります (96 ピクセル)。

私のSamsung Galaxy SIIでは、android.R.dimen.app_icon_sizeは72です。これは私のスクリーンショットの測定値と一致しています。

ここでの結果

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

ネクサス 7.2:

android.R.dimen.app_icon_size = 96
metrics.dip = 192
metrics.density = 2.0
metrics.densityDpi = 320
metrics.heightPixels = 1824
metrics.scaledDensity = 2.0
metrics.widthPixels = 1200
metrics.xdpi = 320.842
metrics.ydpi = 322.966

サムスン SII:

android.R.dimen.app_icon_size = 72
metrics.dip = 108
metrics.density = 1.5
metrics.densityDpi = 240
metrics.heightPixels = 800
metrics.scaledDensity = 1.5
metrics.widthPixels = 480
metrics.xdpi = 217.71428
metrics.ydpi = 218.49463

ここに私のコード:

// Calculate launcher icon size
int size = (int) getResources().getDimension(android.R.dimen.app_icon_size);
int width = size;
int height = size;

// Create launcher icon bitmap      
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);

// Inflate layout to bitmap
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.shortcut, null, false);
// here I edit layout, change ImageView and TextView etc...
layout.setDrawingCacheEnabled(true);
layout.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
layout.layout(0, 0, layout.getMeasuredWidth(), layout.getMeasuredHeight());
canvas.drawBitmap(layout.getDrawingCache(), 0, 0, new Paint());

// Create SendFax intent
Intent shortcutIntent = new Intent();
shortcutIntent.setClass(context, SendFax.class);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

// Create shortcut intent               
Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap);
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, description);

setResult(RESULT_OK, intent);
finish();
4

3 に答える 3

7

私は実用的な解決策を見つけました:

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private int launcherLargeIconSize() {
    ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    return activityManager.getLauncherLargeIconSize();
}

int size1 = (int) getResources().getDimension(android.R.dimen.app_icon_size);
int size2 = Build.VERSION.SDK_INT >= 11 ? launcherLargeIconSize() : 0;
int size = size2 > size1 ? size2 : size1;
于 2013-09-25T11:39:46.587 に答える
0

android res フォルダーに気付いた場合は、いくつかの描画可能なフォルダーがあるはずです。

drawable hdpi 、 drawable mdpi 、 drawable ldpi など 各フォルダーにはデバイスごとに指定された画像があります。これは、各デバイスが画面密度に従って画像を表示するため、一部のデバイスは密度が低く、一部は密度が高いためです

そのため、あるデバイスではアイコン サイズが 96 ピクセルで、別のデバイスでは 72 ピクセルになっています。

古いデバイスと小さいデバイスは 48 と 36 です。

この問題を解決するには、適切なドローアブル フォルダーに適切なサイズのアイコン ファイルを配置するだけで、問題は発生しません。

詳細については、これをお読みください: Android でのマルチスクリーンのサポート

于 2013-09-05T12:15:44.040 に答える
0

ランチャー アイコンの適切なサイズを取得することは、予想されるほど簡単ではないようです。少なくともタブレットは、drawables フォルダーの 1 つ上のフォルダーに移動して、画面密度で予想されるよりも大きなアイコンを表示することを知っています。

これはもう少し議論されています

于 2013-09-24T11:21:06.087 に答える