我正在努力让我的布局能够被Android定制和拾取 我用这些资源目录创建了一个测试应用程序:
它们基本上都包含相同的布局文件,唯一的区别是一个文本视图只包含布局目录名称的内容:
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btnTest"
android:text="Layout xxxxx" />
我的问题是无论我创建什么AVD,它们都会拾取Normal布局文件。 以下是我测试的AVD以及此调试代码的输出:
Configuration config = getResources().getConfiguration();
String sizeName = getSizeName(this);
Log.d(TAG, String.format("screen config smallestScreenWidthDp:%d screenWidthDp:%d densityDpi:%d sizeName: %s" ,
config.smallestScreenWidthDp, config.screenWidthDp, config.densityDpi, sizeName)); //NON-NLS
我做错了什么?
编辑:这不是AVD问题,我在物理设备上得到了相同的行为;我的应用程序在Nexus 6P(1440x2560,518ppi)和Wiko GOA(320x480,165ppi)设备上选择Normal布局。
这是我的test project以供参考。
答案 0 :(得分:0)
无论您使用小型,普通型还是大型或使用dp布局文件夹,Android设备都会根据屏幕大小自动获取正确的布局。
希望这会有效!!
答案 1 :(得分:0)
按照定义
正常:与中等密度HVGA大小相似的屏幕 屏幕。普通屏幕的最小布局大小约为 320x470 dp单位。这种屏幕的例子是WQVGA低密度HVGA 中密度,WVGA高密度。
但是,由于您的尺寸以px表示,我们应该使用以下公式,将它们转换为dp:
dp = 160 * (px/dpi)
现在让我们考虑第一个:
在这种情况下:
dp(x) = 160 * (1440/640) = 360
dp(y) = 160 * (2560/640) = 640
因此,可以将此设备视为&#34;正常&#34;。
考虑第二个:
在这种情况下:
dp(x) = 160 * (540/240) = 360
dp(y) = 160 * (960/240) = 640
因此,这个设备也可以被认为是#34;正常&#34;。 (它与第一个完全一样)
这意味着对于您正在测试的每个设备,设备的实际大小基本相同。
所以,如果你想要一个更大的设备,也许你应该减少densityDpi
例如,如果我有像S4 mini(540x960)这样的设备,但是密度为Dpi:160将获得:
dp(x) = 160 * (540/160) = 540
dp(y) = 160 * (960/160) = 960
这应该对应于大型或x大型设备