2013-01-25 1 views
0

У меня есть приложение, которое создает ярлыки. Он создает ярлык динамически, так что мне нужно знать правильный размер значков запуска.андроид 10" xhdpi таблетки пускового размер значка

, чтобы справиться с этим, я создал dimens.xml в values-ldpi/mdpi/hdpi/xhdpi/xxhdpi и определил мой размер значка как 36/48/72/96/144px соответственно.

Эта схема работает, за исключением 10 ", xhdpi-планшетов (например, нексуса 10). похоже, эти планшеты используют размер значка пусковой установки 144px (xxhdpi), несмотря на наличие экрана xhdpi.

Есть ли способ правильно определить размер значка пусковой установки, который учитывает 10 "xhdpi-планшеты?" Или есть лучшая схема для правильного ввода моих значков? Или, возможно, есть способ отличить этот случай от простого xhdpi случай?

спасибо.

+0

«оказывается эти таблетки использовать размер значков пусковой 144px (xxhdpi), несмотря на есть экран xhdpi» - да, Google упомянул об этом, хотя и через неофициальные каналы: HTTPS : //plus.google.com/118292708268361843293/posts/ePQya3KsTjW Возможно, 'getLauncherLargeIconDensity()' на 'ActivityManager' поможет вам, как сказал Ник в своем посте G +. – CommonsWare

+0

Если вам интересно, посмотрите на http://stackoverflow.com/questions/13215587/android-xxhdpi-resources, чтобы узнать, почему Nexus 10 использует ресурсы XXHDPI. – Eric

+0

@CommonsWare, пожалуйста, разместите это как ответ (getLauncherLargeIconDensity()), который сработал. –

ответ

1

Отвечая мои собственные вопросы.

Чтобы получить размер значков запуска, просто вызовите ActivityManager.getLauncherLargeIconSize() как предложено CommonsWare выше. Одна небольшая икота, что это доступно только на API 11 +. В этом случае вернитесь к использованию DisplayMetrics. Это, конечно же, потерпит неудачу, если будет 10-дюймовое устройство XHDPI, в котором работает Android 2, что крайне маловероятно (поскольку X * HDPI не существовал во время Android 2). Вот метод полезности я написал,

@SuppressLint("NewApi") 
private int getLauncherIconSize() { 
    int size = 48; 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     ActivityManager mgr = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE); 
     size = mgr.getLauncherLargeIconSize(); 
    } else { 
     DisplayMetrics metrics = new DisplayMetrics(); 
     activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     switch (metrics.densityDpi) { 
     case DisplayMetrics.DENSITY_LOW: 
      size = 36; 
      break; 
     case DisplayMetrics.DENSITY_MEDIUM: 
      size = 48; 
      break; 
     case DisplayMetrics.DENSITY_HIGH: 
      size = 72; 
      break; 
     case DisplayMetrics.DENSITY_XHIGH: 
      size = 96; 
      break; 
     case DisplayMetrics.DENSITY_XXHIGH: 
      size = 144; 
      break; 
     } 
    } 

    return size; 
}