Размер значка запуска планшета xhdpi для Android 10 дюймов

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

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

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

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


person Jeffrey Blattman    schedule 25.01.2013    source источник
comment
похоже, что эти планшеты используют значок запуска размером 144 пикселя (xxhdpi), несмотря на то, что имеют экран xhdpi — да, Google упомянул об этом, хотя и по неофициальным каналам: plus.google.com/118292708268361843293/posts/ePQya3KsTjW Возможно, getLauncherLargeIconDensity() на ActivityManager вам поможет, как Ник упомянул в своем посте на Google+.   -  person CommonsWare    schedule 25.01.2013
comment
Если вам интересно, посмотрите stackoverflow.com/questions/13215587/android. -xxhdpi-resources, чтобы узнать, почему Nexus 10 использует ресурсы XXHDPI.   -  person Eric    schedule 25.01.2013
comment
@CommonsWare, пожалуйста, опубликуйте это как ответ (getLauncherLargeIconDensity()), который сработал.   -  person Jeffrey Blattman    schedule 25.01.2013
comment
На самом деле, поскольку я не полностью понял вашу проблему, не говоря уже о том, поможет ли и как getLauncherLargeIconDensity(), я бы рекомендовал вам в этом случае ответить на свой вопрос. Это будет более полезно для других, которые сталкиваются с этим вопросом.   -  person CommonsWare    schedule 25.01.2013


Ответы (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;
}
person Jeffrey Blattman    schedule 25.01.2013