对android的屏幕分类,主要是依靠这2个属性来分类:size和density.你要意识到你的程序会被安装到的设备的屏幕,都是由size和density来限定这个屏幕的规格。这样的话,你的APP要包括多种可选择的资源,使得你的程序在不同的size和density的屏幕上达到最好的显示效果。
size在广义上来说一般有四种:small,normal,large,xlarge
以及四种density:low(ldpi),medium(mdpi),high(hdpi),extra high(xhdpi)
为了明确在不同的屏幕上要使用的布局和bitmap资源,你必须要把这些可选择的资源放在不同的目录之下,就像前面说的定义不同语言的字符串一样。
而且也要注意,屏幕方向(横屏或者竖屏)的变化也是被认为是一种屏幕size的变化,所以很多APP也需要对在不同屏幕方向下的layout进行修正,以达到最优的用户体验。
创建不同的layout
为了让你的用户在不同的屏幕size下都达到最优的体验效果,那么针对你的app想支持的不同的屏幕size,你都要去提供一个唯一的xml layout文件。每一个layout都要被放在对应的目录之下,这个目录用 –<screen_size(屏幕规格)>这个后缀来修饰.比方说一个针对大屏的layout文件要放置在/res/layout-large/目录下。
注意:android系统为了适当的去适应屏幕,它会自动去缩放你的layout。所以,对于不同屏幕size的layout,你不必去纠结于非常精确的UI元素的大小,而是要关注整个layout的布局,这个是影响用户体验的关键(比方说里面在同一层的重要的兄弟视图的大小和位置).
下面的例子里面,这个项目包含有一个默认的layout和一个针对large规格屏幕的layout :
MyProject/
res/
layout/
main.xml
layout-large/
main.xml
这2个文件的名字必须一致,但是为了在不同的对应的屏幕下展现最合适的UI,里面的内容可以不一样。
在你的app代码里面使用layout的方法,一般是:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
} 系统会根据你的app运行的屏幕规格,来载入对应的合适的layout目录。想了解更多关于android如何选择合适的资源,请阅读
Providing Resources
下面举另外一个例子,这个例子里面,这个项目为手机屏幕在横屏的时候,提供了一个指定的layout:
MyProject/
res/
layout/
main.xml
layout-land/
main.xml
默认的layout是针对竖屏的。
如果你还想要针对large规格的手机,提供在竖屏的时候的一个特殊layout,那么这个layout目录需要加2个修饰符:
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
注意:在android3.2以及之上的版本,提供了一种更加高级的方法来定义屏幕的规则,它允许你根据与density无关的最小的屏幕像素宽度和高度,来指定不同的资源给不同的规格的屏幕。这一节里面我们不讲这个新的技术,想要了解更多,请阅读:Designing for Multiple Screens.
创建不同的Bitmap
你应该为广义上的四种density:low,medium,high,extar-high提供合适缩放比例的bitmap资源。这么做可以让的你app在屏幕上表现出非常好的图形效果和屏幕展现。
你可以利用原始的矢量图来创建你需要针对不同density的缩放比例的图片,一般我们使用如下的缩放比例:
- xhdpi: 2.0
- hdpi: 1.5
- mdpi: 1.0 (baseline)
- ldpi: 0.75
这个意思是说为xhdpi的设备,你要制作一张200*200的图片,同理的你需要为其他的density分别制作的图片规格为:hdpi:150x150 , mdpi:100x100 , ldpi:75x75
把这些图片资源放置到合适的drawable资源目录下:
MyProject/
res/
drawable-xhdpi/
awesomeimage.png
drawable-hdpi/
awesomeimage.png
drawable-mdpi/
awesomeimage.png
drawable-ldpi/
awesomeimage.png
任何时候我们使用@drawable/awesomeimage的时候,系统都根据屏幕的density选取不同的图片。
注意:对伊low-density的资源并不是必须定义的。当你提供了hdpi的资源的时候,系统在low-density的屏幕下,会自动的把hdpi里面的资源图片规格缩放到原来的一半,来适应low-density的屏幕。
查看更多app icon创建的指导,请阅读:Iconography design guide.
本文介绍如何为不同尺寸和密度的Android屏幕设计布局和位图资源,以实现良好的用户体验。包括针对各种屏幕尺寸(如small、normal、large、xlarge)及密度(如ldpi、mdpi、hdpi、xhdpi)创建特定的布局文件和按比例缩放的位图。
747

被折叠的 条评论
为什么被折叠?



