对于不同的显示尺寸,我有许多不同的布局(参见屏幕截图)。是否有可能在运行时以编程方式确定使用了哪个?
编辑:建议使用此功能:
DisplayMetrics displayMetrics = new DisplayMetrics();
float density = displayMetrics.density;
3个设备返回0:Samsung T530NU,ASUS Nexus 7,Droid Maxx
这段代码:
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
int densityDpi = (int)(metrics.density * 160f);
会返回以下内容:
Samsung T530NU: 160
ASUS Nexus 7: 320
Droid Maxx: 320
编辑2: 我对@ Selvin的建议实施了类似的事情:
在res中创建这些文件夹:
values-large-land
values-med-land
values-small-land
values-xlarge-land
values-large-port
values-med-port
values-small-port
values-xlarge-port
每个文件夹都包含一个名为strings.xml的文件 每个strings.xml都包含一个名为device_size的字符串:
<string name="device_size">small-land</string>
值随文件夹而变化。对于values文件夹中的默认strings.xml文件,我将其分配:
<string name="device_size">unknown</string>
然后你可以参考字符串:
String device_size = getResources().getString(R.string.device_size);
返回:
Samsung T530NU: xlarge-land
ASUS Nexus 7: large-land
Droid Maxx: unknown
我不确定Droid Maxx上的未知原因。
答案 0 :(得分:1)
没有任何资源文件夹限定符名称为med
!
您应该使用normal
代替。例如:
values-normal-land
values-normal-port
有关详细信息,请参阅谷歌的链接。