Question

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?

Was it helpful?

Solution

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;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top