简体   繁体   中英

android 10" xhdpi tablet launcher icon size

i have an app that creates shortcuts. it generates the shortcut icon dynamically, so i need to know the correct launcher icon size.

to handle this, i created dimens.xml in values-ldpi/mdpi/hdpi/xhdpi/xxhdpi and defined my icon size to be 36/48/72/96/144px respectively.

this scheme works, except on 10", xhdpi tablets (like the nexus 10). it appears these tablets use a launcher icon size of 144px (xxhdpi) despite have an xhdpi screen.

is there a way to correctly detect the launcher icon size that takes into account 10" xhdpi tablets? or is there a better scheme for getting my icons sized correctly? or perhaps is there a way to differentiate this case from the simple xhdpi case?

thanks.

Answering my own questions.

To get the launcher icon size, simply call ActivityManager.getLauncherLargeIconSize() as suggested by CommonsWare above. One slight hiccup is that this is only available on API 11+. In that case, fall back to using DisplayMetrics . This will of course fail if there was a 10" XHDPI device that ran android 2, which is extremely unlikely (since X*HDPI didn't exist at the time of Android 2). Here's the utility method i wrote,

@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;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM