8

在支持多个屏幕时,有没有办法根据屏幕密度和大小准确知道 Android 在运行时选择了哪些布局(和其他资源) ?

我需要知道文件夹的名称。

编辑:

我需要以编程方式知道文件夹的名称。

4

4 回答 4

17

如果您只是出于调试目的这样做,我建议您执行以下操作:对于您具有布局/可绘制对象的每个限定符,有一个具有相同限定符的值文件夹(例如,如果您有一个 layout-hdpi,还有一个 values-hdpi 来匹配)。为每个文件夹添加一个 strings.xml,并定义一个字符串:

values-hdpi

<string name="folder_name">hdpi</string>

values-xhdpi

<string name="folder_name">xhdpi</string>

然后在需要时解析字符串,它会告诉您选择了哪个文件夹。

于 2013-06-17T21:57:18.943 回答
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;
            }
于 2014-11-26T15:26:31.240 回答
5

想象一下你有这样的结构:

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 设备上为 image.png 获得“drawable-hdpi”。

于 2013-06-17T21:57:37.583 回答
0

布局是根据您的编程方式选择的。与菜单和值相同。照片基于清晰度:HDPI = 高清晰度,LDPI = 低清晰度等。

于 2013-06-17T21:37:35.640 回答