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文件

 @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/                            #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。

创建不同的图片

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

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

  • xhdpi:2.0

  • hdpi:1.5

  • mdpi:1.0(baseline)

  • ldpi:0.75

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

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

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的介绍, 请查看Iconography design guide

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

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

Android - 支持不同的设备 - 支持不同的屏幕的更多相关文章

  1. Android - 支持不同的设备 - 支持不同的语言

    把app的字符串放到另外一个文件中是一个好习惯.Android用android工程中的资源文件夹让这件事变的很简单. 如果使用Android SDK Tools创建工程,这个工具会在工程的根目录下创建 ...

  2. Android - 支持不同的设备 - 支持不同的平台版本

    在最新版本的Android为app提供很好的新API时,也应该继续支持旧版本的Android直到大部分设备已经更新了.这里将要介绍如何在使用最新API带来的优点的同时继续支持老版本. Dashboar ...

  3. Android - 支持不同的设备

    世界上有各种不一样形状和大小的Android设备.由于有各种不同类型的设备,你的app可能在各种设备上运行.为了在Android上尽可能的成功,你的app需要使配各种不同的设备.最重要的几点需要考虑的 ...

  4. appcompat v21: 让 Android 5.0 前的设备支持 Material Design

    1. 十大Material Design开源项目 2. appcompat v21: 让 Android 5.0 前的设备支持 Material Design 主题 AppCompat已经支持最新的调 ...

  5. 国际化之Android设备支持的语种

    昨天发了关于iOS支持的语种,文章最后也补了安卓支持语种列表.但最后发现安卓设备支持跟它列的有出入,我重新完全手工整理了一遍. 我将对应的语种在安卓的语言列表里的显示,也全部逐一列出来了,方便大家到时 ...

  6. Android学习路线(十九)支持不同设备——支持不同(Android)平台版本号

    当最新的Android版本号为你的应用提供着非常棒的APIs时.你却要在很多其它的设备更新之前继续支持老的系统版本号.这篇课程怎样在继续支持低版本号的系统的情况下使用新版本号的高级API. Platf ...

  7. 传感器(2)常用api简介及列出当前设备支持的传感器代码

    Android SDK提供了Android sensor framework,可以用来访问当前Android设备内置的传感器. ASF提供了很多类和接口,可以帮助我们完成各种与传感器有关的任务. 例如 ...

  8. 【Android Developers Training】 13. 支持不同平台版本

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. XE5应用开发支持的安卓设备

    XE5应用开发支持的安卓设备 A.官方文档声明 RADStudio 支持Android设备的应用开发,android版本从2.3到4.3.x,ARMv7处理器,MEON支持.根据Embarcadero ...

随机推荐

  1. html5css3杂记

    最新版本号的safari.chrome.firefox以及opera支持某些html5特性.ie9将支持某些html5特性. html5提供了展现视频的标准<video>支持ogg及mpe ...

  2. POJ 2151 Check the difficulty of problems (动态规划-可能DP)

    Check the difficulty of problems Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4522   ...

  3. Xcode如何添加字体库--

    1.网上搜索字体文件(后缀名为.ttf,或.odf) 2.把字体库导入到工程的resouce中 3.在程序viewdidload中加载一下一段代码 NSArray *familyNames = [UI ...

  4. SE 2014年4月13日

    要求自治系统之间建立BGP邻居关系,AS 100 中由于配置疏忽R5上忘记启用BGP,从而导致了黑洞问题出现.从而需要网络工程师们就现状问题进行分析,并且使用相应技术进行完善,使得AS 400 和AS ...

  5. 利用Nginx构建负载均衡server

    大家都知道.一个域名相应一个IP地址,而一个WebSite则相应一个IP地址上相应port服务的应用程序(或位置).而大型站点的并发訪问量很大,这些站点是怎样在一台Webserver上实现负载均衡的呢 ...

  6. cocos2dx-lua牧场小游戏(一)

    环境: cocos2dx-3.0rc2,   xcode5.0 一.lua项目建立參考 http://blog.csdn.net/daydayup_chf/article/details/249641 ...

  7. 我的Android进阶之旅------>经典的大牛博客推荐(排名不分先后)!!

    本文来自:http://blog.csdn.net/ouyang_peng/article/details/11358405 今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下 谦虚的天下 柳志超 ...

  8. OpenCV中的SVM參数优化

    SVM(支持向量机)是机器学习算法里用得最多的一种算法.SVM最经常使用的是用于分类,只是SVM也能够用于回归,我的实验中就是用SVM来实现SVR(支持向量回归). 对于功能这么强的算法,opencv ...

  9. Android编程心得-Service数据绑定初步

    在Android里,Service的数据绑定是一种重要的用法,我们知道Service与Activity一样是运行在当前应用进程的主线程里面的,他们之间交互的方式有多种,下面我来介绍一下如何使用数据绑定 ...

  10. .NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper

    .NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper 參考演示样例代码,例如以下所看到的: /// <summary> /// MySql ...