Android整体上按照两大类来分类设备屏幕:尺寸和分辨率。app在设备上运行应该考虑大小和分辨率。同样的,你应该包含不同的资源来让app适应不同的屏幕大小和分辨率。

  • 整体上有四种尺寸:小的,正常的,大的,超级大的

  • 和四种分辨率:低分辨率(ldpi),中分辨率(mdpi),高分辨率(hdpi),超高分辨率(xhdpi)

为了声明不同屏幕的不同的布局和突变,你需要把不同的资源放在不同的文件夹下,和处理不同语言的方法一样。

同样要注意到在考虑屏幕大小时也要考虑屏幕的方向(横竖屏),所以很多app需要在每个方向上调整布局来来优化用户体验。

创建不同的布局

为了在不同的屏幕尺寸上优化用户体验,你应该为每个你要支持的屏幕大小创建一个单独的xml文件。每个布局都应该被保存到对应的资源文件夹,命名以<screen_size>后缀结尾。例如,为大屏幕创建的布局文件应该存在res/layout-large

注意:Android会自动拉伸布局来适应屏幕。对于不同屏幕的尺寸的布局,不需要考虑UI控件的绝对大小,可以把更多注意力放在影响用户体验的布局结构上(比如重要的view相对于它的子view的大小和位置)。

例如,这个工程包含默认布局和大屏幕的布局

MyProject/

res/

layout/

main.xml

layout-large/

main.xml

文件名必须完全一样,为了适应不同屏幕大小的不同UI,他们的内容是不同的。

在app中和平常一样引用layout文件

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

系统根据app运行的屏幕大小来从对应的布局文件夹中加载布局文件。更多Android如何选择合适资源的信息在ProvidingResources中介绍。

另外一个例子,这个工程是是如何选择横屏的布局资源。

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/#largelandscape

main.xml

注意:Android3.2及以上版本支持一些高级方法来定义屏幕大小,可以元素最小的高度来宽度来为屏幕大小定义资源。这里不会降到这个新技术。更多信息,查看DesigningforMultipleScreens。

创建不同的图片

你应该为每个分辨率提供合适的可被拉伸的图片资源。这样可以在各种分辨率的屏幕上达到很好的绘图质量和效果。

为了生成这些图片,应该提供矢量图并且为下面的每个分辨率提供图片:

  • xhdpi:2.0

  • hdpi:1.5

  • mdpi:1.0(baseline)

  • ldpi:0.75

着就意味着如果为xhdpi设备提供一张200*200的图片,应该为其他分辨率提供同样的资源:150*150forhdpi,100*100formdpi,75*75forldpi。

然后,把这些文件当道对应的资源文件夹下:

MyProject/

res/

drawable-xhdpi/

awesomeimage.png

drawable-hdpi/

awesomeimage.png

drawable-mdpi/

awesomeimage.png

drawable-ldpi/

awesomeimage.png

任何时候引用@drawable/awesomeimage,系统会根据屏幕分辨率选择合适的图片。

注意:低分辨率(ldpi)的资源并不是总是需要,当提供了hdpi资源后,系统会把他们缩小一半来适应ldpi屏幕

更多提示和为app提供icon的介绍,请查看Iconographydesignguide。

上一篇:Android-支持不同的设备-支持不同的语言

下一篇:Android-支持不同的设备-支持不同的平台版本

更多相关文章

  1. Android(安卓)Touch事件获取手指触摸位置
  2. android 自定义输入法研究
  3. Android用户界面布局
  4. android基础知识16:多分辨率屏显设计及其兼容性测试
  5. Android动态布局小结
  6. Android(安卓)从 assets和res中读取文件
  7. 第三部分:Android(安卓)应用程序接口指南---第三节:应用程序资源--
  8. Uniapp打包apk,添加/res/raw目录资源
  9. Android之机型适配

随机推荐

  1. java集合系列(11)TreeSet
  2. java多线程(5)多线程通信出现的假死现象分
  3. 这篇文章带你彻底理解synchronized关键字
  4. 聊聊java中NIO的增强版AIO
  5. 如果你现在的生活呆腻了,尝试着去改变一下
  6. java中的final关键字解析
  7. android与服务器交互方式
  8. 2021.1.15 ——运算符及关键字
  9. Android动态化方案
  10. 状态机设计