支持多个屏幕时,有没有办法确定Android在运行时期间根据屏幕密度和大小确切选择了哪种布局(和其他资源)?
我需要知道文件夹的名称。
修改
我需要知道该文件夹的名称以编程方式。
答案 0 :(得分:16)
如果您只是为了调试目的而这样做,我建议您执行以下操作:对于您有布局/可绘制的每个限定符,请使用具有相同限定符的values文件夹(例如,如果您有布局-hdpi,也有值-hdpi匹配)。为每个文件夹添加strings.xml,并定义一个字符串:
在values-hdpi
:
<string name="folder_name">hdpi</string>
在values-xhdpi
:
<string name="folder_name">xhdpi</string>
然后在需要时解析字符串,它会告诉您选择了哪个文件夹。
答案 1 :(得分:6)
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch(metrics.densityDpi){
case DisplayMetrics.DENSITY_LOW:
break;
case DisplayMetrics.DENSITY_MEDIUM:
break;
case DisplayMetrics.DENSITY_HIGH:
break;
case DisplayMetrics.DENSITY_XHIGH:
break;
case DisplayMetrics.DENSITY_XXHIGH:
break;
case DisplayMetrics.DENSITY_XXXHIGH:
break;
}
答案 2 :(得分:4)
想象一下,你有这样的结构:
res/
drawable-mdpi/image.png
drawable-hdpi/image.png
drawable-xhdpi/image.png
layout/main.xml
layout-land/main.xml
layout-xlarge/main.xml
layout-sw600dp/main.xml
并且您想知道,使用了哪种布局。
一种方法是在资源中加上一个值:
res/
values-mdpi/strange_info.xml with:
<string name="image_is_from_folder">drawable-mdpi</string>
values-hdpi/strange_info.xml with:
<string name="image_is_from_folder">drawable-hdpi</string>
values-xhdpi/strange_info.xml with:
<string name="image_is_from_folder">drawable-xhdpi</string>
values/strange_info.xml with:
<string name="main_is_from_folder">layout</string>
values-land/strange_info.xml with:
<string name="main_is_from_folder">layout-land</string>
values-xlarge/strange_info.xml with:
<string name="main_is_from_folder">layout-xlarge</string>
values-sw600dp/strange_info.xml with:
<string name="main_is_from_folder">layout-sw600dp</string>
在代码中你只需
String mainFolderName = context.getResources().getString(R.string.main_is_from_folder);
我对-Xdpi限定符有一些疑问,但它应该有效(未经测试)。请注意,使用上述结构,您将在ldpi devices for image.png上获得“drawable-hdpi”。
答案 3 :(得分:0)
根据您的编程方式选择布局。与菜单和值相同。照片基于以下定义:HDPI =高清晰度,LDPI =低清晰度等。