Android资源将配置概念概括为设备的任何配置。语言是一个配置选择。
Android允许你基于相同资源ID的布局模式选择不同的布局集。
Android通过为每个配置使用不同的目录来做到这一点。
例子
当使用智能手机时,我们可以垂直或水平使用它。垂直模式称为纵向模式,水平模式模式的横向模式。
以下三个main_layout.xml文件都用于布局。Android将加载相应的文件。\res\layout\main_layout.xml
\res\layout-port\main_layout.xml
\res\layout-land\main_layout.xml
注意
即使这里有三个单独的布局文件,它们在R.java中只生成一个布局ID。
此ID如下所示:R.layout.main_layout
当你检索与此布局ID对应的布局时,会得到适合该设备的适当布局。
目录扩展-port和-land称为配置限定符。
这些限定符不区分大小写,并用连字符( - )与资源分目录名称分开。
这些配置限定符目录中的资源称为备用资源。
没有配置限定符的资源目录中的资源称为默认资源。
资源配置限定符
大多数可用的配置限定符如下所列。可以使用较新的API添加新的限定符。car, desk:对接类型。
en-rUS:语言和地区。
keysexposed, keyssoft, keyshidden:键盘类型。
ldpi, mdpi, hdpi, xhdpi, nodpi, tvdpi:屏幕密度。
long, notlong:屏幕类型。
mccAAA:AAA是移动国家/地区代码。
mncAAA:AAA是运营商/网络代码。
navexposed, navhidden:导航键隐藏或显示。
night, notnight:夜间或日间。
nokeys, qwerty, 12key:键数。
nonav, dpad, trackball, wheel:导航设备的类型。
notouch, stylus, finger:屏幕种类。
port, land:纵向或横向。
small, normal, large, xlarge:屏幕尺寸。
swdp, wdp, hdp:最小宽度,可用宽度,可用高度。
v3, v4, v7:API级别。
使用限定符,你可以在以下代码中显示资源目录。\res\layout-mcc312-mnc222-en-rUS
\res\layout-ldpi
\res\layout-hdpi
\res\layout-car
限定符优先顺序
参考如下目录。\res\layout\main_layout.xml
\res\layout-port\main_layout.xml
\res\layout-en\main_layout.xml
布局文件main_layout.xml可用于两种额外的变体:用于语言或用于布局模式。
即使在纵向模式下,Android从layout-en目录中选择布局,因为语言变化在方向变化之前。
请注意,字符串资源基于各个ID,而布局资源是基于文件。