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. checkbox全选和取消功能

    这是开发中常见的小功能,想当初我也曾对于attr和prop的不了解踩过坑. 前端工作中,常常会使用到select复选框,select复选框有一个属性checked,当使用js或者jquery控制这个属 ...

  2. maven build过程中遇到的问题以及解决方案

    (1)不支持泛型以及@Override 问题来源:使用了低版本的jdk,默认情况下maven使用的是jdk1.5的版本,而泛型和@Override是后期版本才有的,需要更改maven默认的jdk版本. ...

  3. Android中出现Error:In (declare-styleable) FontFamilyFont, unable to find attribute android:font

    Android中出现Error:In (declare-styleable) FontFamilyFont, unable to find attribute android:font 解决办法,今天 ...

  4. micropython陀螺仪控制舵机

    2018-03-1220:14:00 import pyb import time from pyb import Pin xlights = (pyb.LED(2),pyb.LED(3)) MO = ...

  5. python自动化--语言基础二运算符、格式化输出、条件语句、循环语句、列表、元组

    运算符包括:算术运算符.比较运算符.赋值运算符.逻辑运算符.成员运算符.身份运算符. 算术运算符 %   取模(余数) //  取相除的整数部分 /   (5/2=2.5) 比较运算符 ==  等于 ...

  6. 阿里云机器学习tensorflow实践

    1,前言 伴随人工智能和深度学习的应用越来越普及,越来越多的开发人员开始投入到智能算法的编程中.由于算法成熟且公开,软件编码这一块不存在难度:但模型训练和预测所需的时间与硬件设备的配置有极大关系,很多 ...

  7. iframe子页面让父页面跳转 parent.location.href

    if ($roleNum < 9) { echo "<script > parent.location.href='admin_login.php' </script ...

  8. 4星|《DK商业百科》:主要商业思想与事件的概括

    全书分为以下6章:1:企业的起步与发展:2:领导和人力资源:3:理财:4:战略和运营:5:营销管理:6:生产与生产后.每章有拆分为成多个比较小的专题,阐述相关专题的主要的商业思想与实践. 基本是作者按 ...

  9. js获取图片信息(一)-----获取图片的原始尺寸

    如何获取图片的原始尺寸大小? 如下,当给 img 设置一个固定的大小时,要怎样获取图片的原始尺寸呢? #oImg{ width: 100px; height: 100px; } <img src ...

  10. 梦想iOS版CAD控件2018.11.07更新

    下载地址: http://www.mxdraw.com/ndetail_10110.html 1.  增加iOS上的CAD绘图接口和使用例子 2.  增加动态交互使用例子 3.  把Android上改 ...