【Android Developers Training】 12. 支持不同屏幕
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。
原文链接:http://developer.android.com/training/basics/supporting-devices/screens.html
Android通过两种参数来对屏幕进行分类:屏幕尺寸和分辨率。在开发时,应该将这两个因素同时考虑进去,所以你应该将项目包含一些可选择的资源文件,使得你的应用在不同的屏幕尺寸和分辨率上都能具有最佳的体验。
- 概括地来说,一共有四种尺寸:小,标准,大,超大。
- 概括地来说,一共有四种分辨率:低(ldpi),中(mdpi),高(hdpi),超高(xhdpi)
为了声明你希望在不同的屏幕使用不同的布局和位图,你必须分别在不同的资源放置这些可选择使用的资源,这和你为了支持不同语言所做的工作比较类似(参见上一篇博客:http://www.cnblogs.com/jdneo/p/3446617.html)
另外需要注意的是,屏幕的方向:横屏(landscape)或竖屏(portrait)也是一种屏幕尺寸的变化,所以许多应用为了优化用户体验,会为每一个方向调整布局。
一). 创建不同的布局
为了在不同屏幕尺寸上获得最佳的用户体验,你应该为你希望支持的每一个屏幕尺寸分别创建一个XML布局文件。每一个布局应该存储在相应的资源目录中,以“-<screen_size>”作为名称后缀。例如,对应于大尺寸屏幕的的布局应该存放在“res/layout-large/”这一目录下。
Note:
Android会为了适当地适应屏幕自动调整你的布局。所以在你对应于不同屏幕尺寸的布局中,不需要担心UI元素的绝对尺寸,而应该关注影响用户体验的布局结构(比如一些重要UI元素相对于其他元素的相对尺寸和相对位置)
例如,以下项目包含一个默认布局和一个对应于大尺寸屏幕上的布局:
MyProject/
res/
layout/
main.xml
layout-large/
main.xml
文件的名字必须完全一致,但是为了为对应尺寸的屏幕提供最优化的UI,每个文件的内容是不同的。
而在应用中,对布局文件的引用不需要改变:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
系统会根据运行该应用的设备的屏幕尺寸,从相应的目录下加载布局文件。学习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
Note:
Android 3.2及以上版本的系统可以通过一种更高级的方法来定义屏幕尺寸,这使你可以通过dip(density-independent pixels)来特定资源相对于屏幕大小的最小宽度和高度。更多信息可以阅读:Designing for Multiple Screens
二). 创建不同的位图
你应该为不同的分辨率密度的屏幕(低,中,高,超高)提供相应的资源文件。这可以帮助你在不同的屏幕上,获取优秀的图像质量性能表现。
为了创建这些图像,你应该使用下述的尺寸参数将原始矢量图的尺寸进行放大或缩小:
- xhdpi:2.0
- hdpi:1.5
- mdpi:1.0(基准)
- ldpi:0.75
这意味着如果你为一个xhdpi的设备生成了一幅200x200的图像,那么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”,系统会根据屏幕的规格自动地选择相应的图像文件。
Note:
ldpi的资源并不一定一直是必须的。当你提供了hdpi的资源,系统会将它缩小一半来匹配ldpi的屏幕
有关创建应用图标集的信息,可以阅读:Iconography design guide
【Android Developers Training】 12. 支持不同屏幕的更多相关文章
- 【Android Developers Training】 10. 序言:支持不同设备
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 13. 支持不同平台版本
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 11. 支持不同语言
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 70. 使用ViewPager实现屏幕滑动
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 1. 创建一个Android项目工程
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 83. 实现高效网络访问来优化下载
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 19. 序言:通过Fragments构建动态UI
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 62. 搭建一个OpenGL ES环境
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 60. 在你的UI中显示位图
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
随机推荐
- 【更新WordPress 4.6漏洞利用PoC】PHPMailer曝远程代码执行高危漏洞(CVE-2016-10033)
[2017.5.4更新] 昨天曝出了两个比较热门的漏洞,一个是CVE-2016-10033,另一个则为CVE-2017-8295.从描述来看,前者是WordPress Core 4.6一个未经授权的R ...
- dubbo在企业中用得多吗?
看了阿里的dubbo,据说是一个不错的服务框架, 不过,好像Minglisoft.technology搞研发希望各位可以指点学习 想知道其他的公司用这个框架多吗?遇到的问题能否快速解决呢?抉择中...
- 如何升级php版本---从php5.5.12 升级php7.1.5 wamp实践
1.从官网下载一个php7.1.5 2.将刚下载的压缩包解压缩,修改命名为php7.1.5,即php+版本号. 3.将这个文件夹放在wamp/bin/php 目录下. 4.将原来版本的php5.5.1 ...
- iOS 证书详情介绍
1.Certification(证书)安装证书后使这台电脑就有开发APP和真机调试的功能. 证书分为开发证书(Developer Certification)和发布证书(Distribution Ce ...
- 026 hibernate操作树形结构
树形结构:也就是目录结构,有父目录.子目录.文件等信息,而在程序中树形结构只是称为节点. 一棵树有一个根节点,而根节点也有一个或多个子节点,而一个子节点有且仅有一个父节点(当前除根节点外),而且也存在 ...
- ideal导入非maven工程-zdy
最近在老总给了一个ant部署的项目,发现ideal并没有支持ant直接一键自动配置的功能,like maven一样的,你们懂得.所以在这里记录一下我的心酸. 项目总体结构,webapp准备在ideal ...
- vue实例的几个概念
1.构造器 vue应用都是通过vue构造函数创建实例来启动的,在创建vue实例时需要传入一个options对象,该对象可以包含数据.模板.挂在元素.方法.生命周期钩子等选项: var vm = new ...
- Zepto源码分析-动画(fx fx_method)模块
源码注释 // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT l ...
- Python有哪些好用的语言翻译方法
最近有个需求,要将几万条数据从日语翻译成中文.因为数据的获取和处理用的是python代码,所以想先尝试翻译部分也用python实现. 目前网上查到的翻译方法有百度.有道云以及谷歌翻译,下面会对这三个方 ...
- 初入计算机图形学(二):对bidirectional path tracing的一些困惑
本人水平有限,若有错误也请指正~ 前文提及了光线追踪的一些常用手法,但是其中path tracing的实现最为简单,但是其最致命的一个缺点就是图像收敛速度很慢..原因在于从摄影机发射出的每一条光线若不 ...