Atajo de Android icono del iniciador de mapa de bits de tamaño
android icon shortcuts (3)
Si nota en la carpeta de res de Android, debe haber varias carpetas dibujables
hdpi dibujables, mdpi dibujables, ldpi dibujables, etc. en cada carpeta tiene imágenes designadas para cada dispositivo, porque cada dispositivo muestra imágenes de acuerdo con la densidad de la pantalla, algunos dispositivos tienen baja densidad y algunos tienen alta densidad
por eso, en un dispositivo, el tamaño de su icono es de 96 px, y en otro, 72
los dispositivos más viejos y más pequeños son incluso 48 y 36
para solucionar el problema, solo tiene que rellenar las carpetas dibujables apropiadas, con el archivo de icono de tamaño correcto, y luego no tendrá un problema
para obtener más información, lea esto: Soporte de pantallas múltiples en Android
Tengo problemas para encontrar el tamaño correcto del icono del iniciador para mi acceso directo.
En mi Nexus 7.2, el valor de android.R.dimen.app_icon_size (ver código) es de 96 píxeles. Pero si mido el tamaño del icono real de otras aplicaciones en una captura de pantalla de mi pantalla de inicio, es de 120 píxeles. Después de crear un shortshut, es más pequeño (96 px) que todos los demás íconos de la aplicación (120px)
En mi Samsung Galaxy SII android.R.dimen.app_icon_size es 72. Y esta coincidencia con mi medida de captura de pantalla.
Aquí el resultado de
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Nexus 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
Samsung 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
Aquí mi código:
// 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();
He encontrado una solución de trabajo:
@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;
Obtener el tamaño correcto de un icono de iniciador parece no ser tan directo como cabría esperar. Sé que, al menos, las tabletas van a una carpeta en la carpeta de los dibujos para mostrar los íconos más grandes que los esperados por la densidad de la pantalla.
Aquí hay un poco más de discusión