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. 转 MySQL数据库基础

    http://lib.csdn.net/article/mysql/57883 1 数据库基础 一.数据库与数据库管理系统 1.数据库(DB):存放数据的仓库,从广义来说,数据不仅包括数字,还包括了文 ...

  2. 全面学习ORACLE Scheduler特性(4)创建和管理Schedule

    三.使用Schedules 10g 中新推出的SCHEDULER可能确实会让很多初接触的朋友感觉晕头晕脑,相比之前的jobs,SCHEDULER中新增的概念太多.比如说jobs,仍然可以理解成之前版本 ...

  3. C#基础 结构体 枚举类型

    结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 一.定义的例子: struct student { public int nianling; public int fen ...

  4. 17 C#中的循环执行 while循环

    在编程中有代码的执行主要有三种方式.(1)顺序执行,也就是一条语句一条语句按顺序执行:(2)条件执行,也就是if...else.当某种条件满足时执行一些代码:(3)循环执行,就是当某种条件满足的时候, ...

  5. 常用的几个Dos命令-持续更新中

    1.服务相关 (1).查看服务 C:\Windows\system32>net start 已经启动以下 Windows 服务: (2).启动服务 C:\Windows\system32> ...

  6. Linux学习笔记之Linux命令

    1. blkid  查看当前系统中所有已挂载文件系统的类型

  7. 类支付宝密码输入框NumberEditText(简单粗暴的定制方式)

    因为项目需要,设计了一个下图样的验证码输入框(ps:个人认为还不如直接一个EditText,用户友好度可能更好,何况这页面99.9%的用户不会使用,但是没办法,别人才是专业的设计师). 其实界面很简单 ...

  8. 创建密码带有特殊字符的dblink

    使用的是data studio,所以末尾不加分号 create database link link_to_143 connect " using '(DESCRIPTION = (ADDR ...

  9. Codeforces_761_E_(dfs)

    E. Dasha and Puzzle time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  10. 梦想CAD控件事件COM接口知识点

    一.鼠标事件 _DMxDrawXEvents::MouseEvent 控件中的鼠标事件. 参数 说明 LONG lType 事件类型,1鼠标移动,2是鼠标左键按下,3是鼠标右键按下,4是鼠标左键双击 ...