APP支持不同的设备 之 支持不同屏幕

本文介绍如何为不同尺寸和密度的Android屏幕设计布局和位图资源,以实现良好的用户体验。包括针对各种屏幕尺寸(如small、normal、large、xlarge)及密度(如ldpi、mdpi、hdpi、xhdpi)创建特定的布局文件和按比例缩放的位图。

对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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值