Android resource notlong / long identifiers not working

探讨了Android中资源文件夹使用与设备分辨率之间的关系,解释了'notlong'和'long'标识符的用途及如何正确适配不同尺寸的设备。

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.

share | improve this question
 

3 Answers

up vote 2 down vote accepted

The 'notlong' identifier is for devices that are similar in aspect ratio to baseline devices (seehttp://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).

share | improve this answer
 
 
Short question. Based on your explanation, shouldn't the 1280 X 800 resolution use the resource in -long folder and not -notlong? –   Maziz  Aug 1 '12 at 22:15
 
1280x800 has a ratio of 1.6. I'm assuming it is close enough to baseline (800/480 = 1.6, 480/320 = 1.5) that it's using the 'notlong' resources. So no, it won't use the 'long' resources. –   ebernie  Aug 2 '12 at 20:54
 
This sdk omission is a shame :/ –   nobre  Feb 6 at 19:39

you have read this doc?http://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts

share | improve this answer
 
 
I did, thanks for the link. Indeed yoou can specify the smallest width, but it's not the width of the application it's trying to adapt but the aspect ratio of the device. –   Maziz  Aug 1 '12 at 5:06

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值