文章官网位置:Develop>>Trainning>>Getting Started>>Supporting Different Devices>>Supporting Different Screens
连接:Supporting Different Screens
安卓对设备屏幕的分类有两个标准:尺寸和密度。
你应该期望你的应用安装在各种屏幕尺寸和密度的设备上。
因此,你应该为你的app适应不同尺寸和密度的屏幕提供对应资源。
*一般有四个尺寸:小(small),中(normal),大(large),超大(xlarge)
*四个密度:低(ldpi),中(mdpi),高(hdpi),超高(xhdpi)
不同屏幕要声明不同的布局和位图,你必须把这些可选资源放在指定的目录,就像你为不同语言做的处理那样。
同时要注意屏幕的方向(横屏还是竖屏)也被认为是屏幕尺寸的一种变化,app都应该修改、优化不同方向布局的用户体验。
一、创建不同布局(Create Different Layouts)
在不同屏幕尺寸上优化用户体验,你应该为每个你想支持的屏幕尺寸建立唯一的xml布局文件,每个布局应该保存在相应的资源目录,用-屏幕尺寸(后缀)。
例如,给大屏幕的布局应该保存在res/layout-large/
注意:为了正确匹配屏幕android会适当的缩放你的布局,因此,你给不同屏幕做的布局没必要担心
UI元素的绝对尺寸,而应该集中精力在影响用户体验的布局元素(比如重要view和和它相关view的尺寸或者位置)。
例如,这个工程包括一个默认的布局和一个为大屏幕提供的可选的布局:
MyProject/
res/
layout/
main.xml
layout-large/
main.xml
这些文件名称必须完全相同,为了给不同屏幕显示最佳效果他们的内容是不一样的。
在你的app文件中像下面这样来简单引用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
系统会根据app运行设备加载响应目录下的布局文件。更多信息关于android如何选择合适的资源请参考提供资源( Providing Resources) 向导
另一个关于横向布局的例子:
MyProject/
res/
layout/
main.xml
layout-land/
main.xml
默认情况下layout/main.xml用于竖屏模式。
如果你想给横屏和更大的屏幕都提供一个指定的布局,你应该会用到限定词large 和 land
MyProject/
res/
layout/ # 默认 (竖屏)
main.xml
layout-land/ # 横屏
main.xml
layout-large/ # 大屏幕 (竖屏)
main.xml
layout-large-land/ # 大屏幕 横屏
main.xml
注意:Android3.2及以上版本提供一个高级的方法允许你通过独立密度像素根据屏幕尺寸最小宽度和高度来指定资源。
这篇文章没有包含这项新技术,想了解更多信息,请阅读多屏幕设计(Designing for Multiple Screens)。
二、创建不同位图(Create Different Bitmaps)
你应该为不同密度的设备提供适合比例的位图,low,medium,high和超高密度。这样可以在各种密度的屏幕上都能显示并且有良好图像质量。
生成图片,你应该使用向量格式图片作为原始资源,给下面不同密度的尺寸比例生成图片:
xhdpi: 2.0
hdpi: 1.5
mdpi: 1.0 (baseline)
ldpi: 0.75
这意味这如果你给xhdpi生成一个200*200的图片,你就应该用同样的资源给hdpi生成一个150*150
100*100给mdpi,75*75给ldpi。
然后放在适当的图片资源目录:
MyProject/
res/
drawable-xhdpi/
awesomeimage.png
drawable-hdpi/
awesomeimage.png
drawable-mdpi/
awesomeimage.png
drawable-ldpi/
awesomeimage.png
任何时候你引用 @drawable/awesomeimage,系统会根据屏幕密度选择适当的位图。
注意:低密度(ldpi)资源不是必须的。如果你提供了高密度(hdpi)的资源,
系统会为低密度屏幕缩小为高密度的一半。
更多关于给app创建按钮资源的提示和指导,参考插图设置指南(Iconography design guide)