Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android resource notlong / long identifiers not working

Currently I have the following resource folders:
1. layout-sw600dp
2. layout-sw600dp-notlong

The idea is that we have 3 types of devices and the devices should use the resources from the correct folder accordingly. The devices are:
1. Samsung Galaxy Tab 10.1, 1280 X 800 mdpi. 16/10
2. Asus Transformer TFT 101, 1280 X 800 mdpi. 16/10.
3. A generic tablet, 800 X 600 ldpi. 4/3.

The problem is that all 3 devices use resources from layout-sw600dp-notlong. To my understanding 4/3 is categorized as -notlong devices.

Is there anything wrong in my identifier usage? Or there's a bug reported for the identifier?

Thank in advance.

like image 984
Maziz Avatar asked Aug 01 '12 04:08

Maziz


2 Answers

According to the source code. (framework/base/core/java/android/content/res/Configuration.java)

        // Is this a long screen?
        if (((longSizeDp*3)/5) >= (shortSizeDp-1)) {
            // Anything wider than WVGA (5:3) is considering to be long.
            screenLayoutLong = true;
        } else {
            screenLayoutLong = false;
        }

So if the aspect ratio is wider than 3:5(or 1.667), it will be treated as long screen.

like image 87
Mac Wang Avatar answered Oct 18 '22 09:10

Mac Wang


The 'notlong' identifier is for devices that are similar in aspect ratio to baseline devices (see http://developer.android.com/guide/practices/screens_support.html). While the docs are scarce on what baseline devices are, typical resolution of Android devices 1.5~1.6. So what you are seeing is correct.

While there is a 'long' identifier for devices that are longer than baseline ratios, it looks like you can't force resources for devices that are shorter (e.g. 800x600).

like image 35
ebernie Avatar answered Oct 18 '22 08:10

ebernie