Android:如何根据XML中的屏幕密度访问不同的布局

时间:2012-04-08 10:28:21

标签: android android-layout

我想知道如何根据屏幕密度来读取不同的XML布局文件。

现在,当我输入一个布局文件并设置为有几个按钮并将它们设置为特定位置时,当我在模拟器中更改为另一个屏幕密度时,位置会发生变化。这就是我理解的应该发生的事情 - 但是如何让程序根据密度使用不同的布局?

我一直在阅读android dev。关于如何开发不同屏幕的页面,但我没有得到那里的例子。

我一直在使用dp / dip尺寸,因此无需建议=)

2 个答案:

答案 0 :(得分:5)

您可以通过为每个标准尺寸

创建布局来实现

您可以找到here如何操作。

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size
res/layout-large/my_layout.xml       // layout for large screen size
res/layout-xlarge/my_layout.xml      // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

res/drawable-mdpi/my_icon.png        // bitmap for medium density
res/drawable-hdpi/my_icon.png        // bitmap for high density
res/drawable-xhdpi/my_icon.png       // bitmap for extra high density

这意味着您应该在res文件夹中创建名为(“layout”,“layout-small”,“layout-large”,“layout-xlarge”,“layout-xlarge-land”)的子目录。

为每个具有相同名称的xml创建一个主xml。

答案 1 :(得分:2)

通过将布局XML文件放在不同的文件夹中,您可以根据屏幕密度让Android加载正确的文件。例如,如果您将layout称为“main.xml”:

  • 将文件放在/res/layout-ldpi/main.xml中意味着它仅用于低密度(或以上)
  • 将文件放在/res/layout-mdpi/main.xml中意味着它仅用于中等密度(或以上)
  • 将文件放在/res/layout-hdpi/main.xml中意味着它仅用于高密度(或高于)
  • 将文件放在/res/layout-xhdpi/main.xml中意味着它仅用于超高密度

您可以使用所有资源(可绘制的,字符串,维度等)执行相同类型的操作(例如drawable-mdpi或values-en [仅用于英语区域设置的值])。您可以在http://developer.android.com/guide/topics/resources/providing-resources.html找到此系统支持的不同设备设置的完整列表(表2:配置限定符名称)