Android Training - 支持不同的尺寸


Android设备屏幕根据两个属性分类:尺寸和密度。你应该期望你的程序被安装在合理的尺寸和密度范围内。例如,你应该针对不同的尺寸和密度提供可选择的资源,让你的程序能有好的展现。
这里有四个常用的尺寸:small, normal, large, xlarge
四个常用的密度:low(ldpi), medium(mdpi), high(hdpi), extra high(xhdpi)
为了能够在不同的屏幕中显示不同的样式和位图,你必须保存不同的资源在独立的目录中,和前面说的不同语言字符串类似。

还要注意的是,不同的屏幕方位(风景或者肖像)被指定为不同的屏幕尺寸。所以很多程序需要修订样式以便在不同方位都能有好的用户体验。

创建不同的样式

为了在不同的屏幕尺寸下有好的用户体验,你必须为每个你想支持的屏幕尺寸创建一个唯一的XML样式文件。每个样式保存在对应的以-<screen_size>为后缀的资源目录中。例如,一个large屏幕的样式目录为res/layout-large/。

提示:Android会自动缩放你的样式,以便合适的填充屏幕。因此,你不用担心不同尺寸屏幕下UI元素的决定尺寸,而是要更多关注样式结构对用户体验的影响(比如相对于相邻view的尺寸和位置)。

例如,下面这个工程包含默认的样式和一个可选择的large屏幕样式:
MyProject/
    res/
        layout/
            main.xml
        layout-large/
            main.xml文件名必须是相同的,但是内容是不同的,它为不同的屏幕尺寸提供对应的UI。


在程序中简单引用样式文件:

  1. @Override  
  2.  protected void onCreate(Bundle savedInstanceState) {  
  3.      super.onCreate(savedInstanceState);  
  4.      setContentView(R.layout.main);  
  5. }  

系统会基于你使用的设备加载合适的样式文件。更多关于Android选择合适资源显示的信息,可以看这个教程: Providing Resources

作为另外一个例子,这个工程使用一个可选的风景(横屏)方位样式:
MyProject/
    res/
        layout/
            main.xml
        layout-land/
            main.xml默认的layout/main.xml文件被使用在肖像(竖屏)方位。

如果你为风景方位和large屏幕提供一个特别的样式,你需要使用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提示:Android3.2以及更高版本支持一种更加先进的定义屏幕尺寸的方法,允许你基于最小宽高去指定资源文件,这个课程不包括这种新技术,想了解请移步到:Designing for Multiple Screens.

创建不同位图

你通常提供不同的位图资源去适应不同的密度:low, medium, high, extra-high。这样能帮助你在不同屏幕密度中取得好的绘图质量和性能。

为了生成这些图像,你需要从原始的矢量格式开始,采用下面的尺寸缩放生成对应密度的图片:
xhdpi: 2.0
hdpi: 1.5
mdpi: 1.0
ldpi: 0.75
意思就是说,如果你生成一个200x200的图片给xhdpi设备,你就需要生成相同的资源给其他设备,hdpi是150x150, mdpi是100x100, ldpi是75x75。

然后,把它们放到对应的绘图资源目录中:
MyProject/
    res/
        drawable-xhdpi/
            awesomeimage.png
        drawable-hdpi/
            awesomeimage.png
        drawable-mdpi/
            awesomeimage.png
        drawable-ldpi/
            awesomeimage.png任何时候你调用@drawable/awesomeimage,系统会根据屏幕密度选择合适的位图。

提示:ldpi资源通常不是必须的,当你提供hdpi资源时,系统会缩放一半去适应ldpi屏幕。

更多关于创建程序图标资源的教程,看这里:Iconography design guide.

相关内容