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. CSS之浮动元素

    <html> <head> <meta charset="utf-8"> <title></title> <sty ...

  2. 240 Search a 2D Matrix II 搜索二维矩阵 II

    编写一个高效的算法来搜索 m x n 矩阵中的一个目标值.该矩阵具有以下特性:    每行的元素从左到右升序排列.    每列的元素从上到下升序排列.例如,考虑下面的矩阵:[  [1,   4,  7 ...

  3. sql 所有数据表中 插入字段

    declare @tablename varchar(200)declare @sql varchar(2000)declare cur_t cursor forselect name from sy ...

  4. phpstorm设置代码片段

    tab 向后推进 shift+tab 向前推进 ctrl+d 复制整行 ctrl+Y删除整行 代码片段就是代码快捷键,如果你设置了www.baidu.com这些内容,但是不想一直重复的打,可以设置个代 ...

  5. 内存溢出及Jvm监控工具

    内存泄露与内存溢出 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory. 内存泄露 memory leak,是指程序在申请内存后,无 ...

  6. 联想 P70-t 免解锁BL 免rec Magisk Xposed 救砖 ROOT

    >>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后用 ...

  7. POJ_2536_Gopher II

    题意:n只地鼠,m个地鼠洞,地鼠必须以v的速度在s秒内钻进洞且每个洞仅能容纳一只地鼠,问最少有几只地鼠会被老鹰吃掉. 分析:最大匹配问题,将s秒内地鼠能够跑到的洞与该地鼠连成一条边,在最后得到的图中使 ...

  8. contab的使用方法

    linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所以, ...

  9. docker搭建日志收集系统EFK

    EFK Elasticsearch是一个数据搜索引擎和分布式NoSQL数据库的组合,提过日志的存储和搜索功能. Fluentd是一个消息采集,转化,转发工具,目的是提供中心化的日志服务. Kibana ...

  10. [Luogu] P3258 [JLOI2014]松鼠的新家

    题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前 ...