Android使用两个一般属性对设备屏幕进行分类:大小和分辨率。您应该期望您的应用程序将安装在具有大小和分辨率范围的屏幕的设备上。因此,您应该添加一些替代资源,以便针对不同的屏幕大小和分辨率优化应用的外观。
- 有四个一般化的大小:small, normal, large, xlarge
- 四个广义分辨率:低(ldpi),中等(mdpi),高(hdpi),超高(xhdpi)
要声明要用于不同屏幕的不同布局和位图,必须将这些替代资源放在不同的目录中,类似于对不同语言字符串的处理方式。
另请注意,屏幕方向(横向或纵向)被认为是屏幕尺寸的变化,因此许多应用程序应修改布局,以优化每个方向的用户体验。
创建不同的布局
要在不同的屏幕尺寸上优化用户体验,您应该为要支持的每个屏幕尺寸创建一个唯一的布局XML文件。每个布局都应该保存到相应的资源目录中,并以 - <screen_size>
后缀命名。例如,大屏幕的唯一布局应该保存在res/layout-large /
下。
注意:Android会自动缩放您的布局,以适合屏幕。因此,不同屏幕尺寸的布局不需要担心UI元素的绝对大小,而是专注于影响用户体验的布局结构(例如重要视图相对于兄弟视图的大小或位置)。
例如,此项目包括默认布局和大屏幕的替代布局:
MyProject/
res/
layout/
main.xml
layout-large/
main.xml
文件名必须完全相同,但它们的内容不同,以便为相应的屏幕大小提供优化的UI。
只需像往常一样在您的应用程序中引用布局文件:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
系统根据运行应用程序的设备的屏幕大小从相应的布局目录加载布局文件。
另一个例子,这里有一个具有横向定向的替代布局的项目:
MyProject/
res/
layout/
main.xml
layout-land/
main.xml
默认情况下,layout / main.xml
文件用于纵向。
如果要为横向提供特殊布局,包括在大屏幕上,则需要同时使用large和land限定词:
MyProject/
res/
layout/ # default (portrait)
main.xml
layout-land/ # landscape
main.xml
layout-large/ # large (portrait)
main.xml
layout-large-land/ # large landscape
main.xml
注意:Android 3.2及更高版本支持定义屏幕尺寸的高级方法,允许您根据与分辨率无关的像素的最小宽度和高度指定屏幕尺寸的资源。本课不包括这种新技术。有关详细信息,请参阅多屏设计。
创建不同的位图
您应该始终提供适合缩放到每个通用分辨率的位图资源: low, medium, high and extra-high density。这有助于在所有分辨率屏幕上实现良好的图形质量和性能。
要生成这些图像,您应该从矢量格式的原始资源开始,并使用以下尺寸比例为每个分辨率生成图像:
- xhdpi:2.0
- hdpi:1.5
- mdpi:1.0(基线)
- ldpi:0.75
这意味着,如果为xhdpi设备生成200x200图像,则应为150x150(hdpi),100x100(mdpi)和75x75(ldpi设备)生成相同的资源。
然后,将文件放在相应的drawable资源目录中:
MyProject/
res/
drawable-xhdpi/
awesomeimage.png
drawable-hdpi/
awesomeimage.png
drawable-mdpi/
awesomeimage.png
drawable-ldpi/
awesomeimage.png
任何时候你引用@ drawable / awesomeimage,系统根据屏幕的分辨率选择适当的位图。
注意:低分辨率(ldpi)资源不总是必需的。当您提供hdpi资源时,系统会将其缩小一半,以正确适合ldpi屏幕。