Android系统使用两个普通属性:尺寸和密度,来对设备屏幕进行分类。

你须要先预測你的应用将会在什么样屏幕的设备上安装,包含屏幕尺寸和密度。这种话,你就须要提供一些可选的资源类让你的应用在不同屏幕的设备上有最佳的展示。

  • 有四种普遍的尺寸:small, normal, large, xlarge
  • 还有四种普遍的密度:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)

要为不同的屏幕声明不同的布局和图片,你须要让这些可选的资源放在不同的文件夹下,这和怎样支持多语言的做法类似。

相同要考虑到在不同屏幕尺寸下的屏幕方向配置,因此非常多应用通在不同的方向上改变不同的布局来实现最佳的用户体验。

创建不同的布局


让你的应用在不同的屏幕尺寸上有好的用户体验,你应该为每一个你想支持的屏幕尺寸创建一个唯一的XML布局文件。每一个布局文件应该被存放到适当的资源文件夹下。文件夹名以 -<screen_size> 为后缀。

比如,一个存放大屏幕的布局文件夹的名称是res/layout-large/

提示: Android系统会自己主动伸缩布局来正确的适配屏幕。因此,你不须要操心你为不同布局设计的UI元素的实际尺寸,你要注意的是影响用户体验的布局结构(比如重要布局相对与它旁边布局的尺寸和位置)。

比如,这个项目包含一个默认的布局文件夹以及是用于大屏幕的布局文件夹:

MyProject/
res/
layout/
main.xml
layout-large/
main.xml

文件名称一定要全然同样,可是它们的内容要不一样。用来为不同的屏幕尺寸提供最佳的UI展示。

在应用中简单地引用布局:

@Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
}

系统会依据设备的屏幕尺寸加来适当的布局文件夹下的布局文件。很多其它关于选取适当布局资源的信息,请參阅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

提示: Android 3.2 以及更高的系统提供了定义屏幕尺寸的高级方法。它同意您依据密度无关的像素方面的最小宽度和高度,以指定的屏幕尺寸的资源。

这篇课程不包括这项新技术。很多其它信息。请參阅Designing
for Multiple Screens

创建不同的图片


你应该为每一个通用密度的设备提供可以正确缩放的图片资源:low, medium, high and extra-high 密度。

这能帮助你在全部屏幕密度的设备上获得更高的图片质量以及更好的性能。

要生成这些图片,你首先须要使用以下的尺寸规模为你的原生资源的矢量资源为不同的屏幕密度生成图片:

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (baseline)
  • ldpi: 0.75

这表示假设你为xhdpi的设备生成一个200x200 的图片,你就应该为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的时候。系统都会依据屏幕密度选择适当的图片。

提示: 低分辨率(ldpi) 资源并非必要的。当你提供了hdpi的资源时,系统会将资源缩小一半来正确的适应ldpi的屏幕。

很多其它关于为应用创建icon资源的向导。请參阅Iconography design guide

Android学习路线(十八)支持不同设备——支持不同的屏幕的更多相关文章

  1. android 学习随笔十八(广播与服务 )

    1.广播接收者注册 清单文件注册(Android四大组件都要在清单文件中注册) 一旦应用部署,广播接收者就生效了,直到用户手动停止应用或者应用被删除 广播接收者可以使用代码注册 需要广播接收者运行时, ...

  2. Android学习(十八)Toast的使用

    一.什么是Toast 1.Toast是一种提供给用户简洁提示信息的视图. 2.该视图以浮于应用程序之上的形式呈现给用户, Toast提示界面不获取焦点,在不影响用户使用的情况下,给用户某些提示. 3. ...

  3. Android学习路线(二十四)ActionBar Fragment运用最佳实践

    转载请注明出处:http://blog.csdn.net/sweetvvck/article/details/38645297 通过前面的几篇博客.大家看到了Google是怎样解释action bar ...

  4. Android学习路线(二十一)运用Fragment构建动态UI——创建一个Fragment

    你能够把fragment看成是activity的模块化部分.它拥有自己的生命周期,接受它自己的输入事件,你能够在activity执行时加入或者删除它(有点像是一个"子activity&quo ...

  5. 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除

    目录 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除 18.1 centos6系统启动过程及相关配置文件 18.1.1 centos6系统启动过程 18.1.2 centos6启 ...

  6. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(下)

    LinearGradient 线性渐变渲染器 LinearGradient中文翻译过来就是线性渐变的意思.线性渐变通俗来讲就是给起点设置一个颜色值如#faf84d,终点设置一个颜色值如#CC423C, ...

  7. Android学习路线总结,绝对干货

    title: Android学习路线总结,绝对干货 tags: Android学习路线,Android学习资料,怎么学习android grammar_cjkRuby: true --- 一.前言 不 ...

  8. 十一、Android学习第十天——项目开始(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十一.Android学习第十天——项目开始 Android知识点的学习告一 ...

  9. Android学习路线指南

    看到这位大牛的博文,不禁得感概,我最近也遇到了很多问题,内心彷徨不堪,转载大牛这篇博文,是为了更好的勉励自己.原文地址在最后面. 前言 看到一篇文章中提到"最近几年国内的初级Android程 ...

  10. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(上)

    前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有Java层的,也有jni层深入到Framework.Canvas有许多的知识内容,构建了一个武器库一般,所谓十 ...

随机推荐

  1. new mysqli_ and 旧mysql

    旧的php处理语法: 1. <select name="s" onChange="redirec()"> <option selected&g ...

  2. VS2013使用单元测试

    一.开发环境 开发工具:VS2013 二.开发流程 1.添加一个控制台项目UnitDemo namespace UnitDemo { public class Program { static voi ...

  3. scla-基础-函数-元组(0)

    //元组 class Demo2 extends TestCase { def test_create_^^(){ val yuana = (1,true,1.2,"c",&quo ...

  4. python--12、数据库进阶

    SQL语句关键词: #再次不做过多介绍 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 使用SELECT查询数据以及. #示例中department为部门表 ...

  5. Angular——路由参数

    基本介绍 在控制中注入$routeParams可以获取传递的参数 区别对比 angular中的路由是指#之后的内容,包括之后的?,而在之前的http地址中我们习惯性的将?放在前面 具体使用 1.形参 ...

  6. Farseer.net轻量级开源框架 入门篇:查询数据详解

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 删除数据详解 下一篇:Farseer.net轻量级开源框架 中级篇: Where条 ...

  7. Spartan6系列之器件详细介绍、选型参考

    1.      概述 Spartan6系列是一类低成本高容量的FPGA,采用45nm低功耗敷铜技术,能在功耗.性能.成本之间很好地平衡:Spartan6系列内部采用双寄存器.6输入的LUT,还有一系列 ...

  8. golang tar gzip 压缩,解压(含目录文件)

    tar是用于文件归档,gzip用于压缩.仅仅用tar的话,达不到压缩的目的.我们常见的tar.gz就是用gzip压缩生成的tar归档文件. go实现tar压缩与解压与zip类似,区别在于tar需要使用 ...

  9. AdMob设计工具google web designer

    一.google web designer工具中文文档: https://support.google.com/webdesigner?hl=zh-Hans#topic=3227692 我用的版本:应 ...

  10. 浅谈FFC

    FFC(Flexible Formatting Context) CSS3引入了一种新的布局模型——flex布局(之前有文章介绍过).flex是flexible box的缩写,一般称之为弹性盒模型.和 ...