在运行时确定使用了哪种布局

时间:2016-11-17 18:47:59

标签: android android-layout

对于不同的显示尺寸,我有许多不同的布局(参见屏幕截图)。是否有可能在运行时以编程方式确定使用了哪个?

res

编辑:建议使用此功能:

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上的未知原因。

1 个答案:

答案 0 :(得分:1)

没有任何资源文件夹限定符名称为med

您应该使用normal代替。例如:

values-normal-land
values-normal-port

有关详细信息,请参阅谷歌的链接。

Providing Resources