Android学习路线(十八)支持不同设备——支持不同的屏幕
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学习路线(十八)支持不同设备——支持不同的屏幕的更多相关文章
- android 学习随笔十八(广播与服务 )
1.广播接收者注册 清单文件注册(Android四大组件都要在清单文件中注册) 一旦应用部署,广播接收者就生效了,直到用户手动停止应用或者应用被删除 广播接收者可以使用代码注册 需要广播接收者运行时, ...
- Android学习(十八)Toast的使用
一.什么是Toast 1.Toast是一种提供给用户简洁提示信息的视图. 2.该视图以浮于应用程序之上的形式呈现给用户, Toast提示界面不获取焦点,在不影响用户使用的情况下,给用户某些提示. 3. ...
- Android学习路线(二十四)ActionBar Fragment运用最佳实践
转载请注明出处:http://blog.csdn.net/sweetvvck/article/details/38645297 通过前面的几篇博客.大家看到了Google是怎样解释action bar ...
- Android学习路线(二十一)运用Fragment构建动态UI——创建一个Fragment
你能够把fragment看成是activity的模块化部分.它拥有自己的生命周期,接受它自己的输入事件,你能够在activity执行时加入或者删除它(有点像是一个"子activity&quo ...
- 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除
目录 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除 18.1 centos6系统启动过程及相关配置文件 18.1.1 centos6系统启动过程 18.1.2 centos6启 ...
- Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(下)
LinearGradient 线性渐变渲染器 LinearGradient中文翻译过来就是线性渐变的意思.线性渐变通俗来讲就是给起点设置一个颜色值如#faf84d,终点设置一个颜色值如#CC423C, ...
- Android学习路线总结,绝对干货
title: Android学习路线总结,绝对干货 tags: Android学习路线,Android学习资料,怎么学习android grammar_cjkRuby: true --- 一.前言 不 ...
- 十一、Android学习第十天——项目开始(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十一.Android学习第十天——项目开始 Android知识点的学习告一 ...
- Android学习路线指南
看到这位大牛的博文,不禁得感概,我最近也遇到了很多问题,内心彷徨不堪,转载大牛这篇博文,是为了更好的勉励自己.原文地址在最后面. 前言 看到一篇文章中提到"最近几年国内的初级Android程 ...
- Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(上)
前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有Java层的,也有jni层深入到Framework.Canvas有许多的知识内容,构建了一个武器库一般,所谓十 ...
随机推荐
- 从 FTP 服务器上下载并保存文件
本例演示如何运用 C# 中的 FtpWebRequest 等对象从 FTP 服务器上获取文件,并结合 Stream 对象中的方法来保存下载的文件: using System; using System ...
- [转]windows 7 下快速搭建php环境(windows7+IIS7+php+mysql)
转贴:http://apps.hi.baidu.com/share/detail/10406992 (1).采用理由: 优点:最大化的桌面图形化操作系统,可维护性优秀.基于IIS v6.0/v7.0( ...
- Java 8 (4) Stream 流 - 使用
在本节中将介绍Stream API支持的许多操作,这些操作可以完成更复杂的数据查询,如筛选.切片.映射.查找.匹配和归约.还有一些特殊的流如:数值流.来自文件和数组等多种来源的流. 筛选和切片 1.用 ...
- CF814C An impassioned circulation of affection
思路: 对于题目中的一个查询(m, c),枚举子区间[l, r](0 <= l <= r < n),若该区间满足其中的非c字符个数x不超过m,则可以将其合法转换为一个长度为r-l+1 ...
- Android 滚动RecyclerView加载图片时的流畅度优化
实现:使用onScrollStateChanged回调检测滚动状态,并在RecyclerViewAdapter内部设置类似isScrolling的状态值来控制网络图片的加载. 下面是代码举例: // ...
- dive into python:模块的导入和搜索文件路径的配置
1.Python中导入模块:import sys:相当于Java中的导入包.类. 比如,我们导入sys模块,使用:import sys; 2.Python中调用函数的时候,会从默认配置的库文件夹中(s ...
- 创建一个 Vue 的实例
每个 Vue 应用都是通过 Vue 函数创建一个新的 Vue 实例开始的: var vm = new Vue({ // 选项 }) 选项:el.data.methods el: 类型: ...
- 【转】上传并解析excel
[转载自]http://blog.csdn.net/u011563331/article/details/51322523 通过解析excel,将数据存储到数据库中.现在将方法保存下来. 使用的是ap ...
- PMP 学习心得
前两天刚考完 PMP,松了一口气,终于考完了,虽然心里有点慌,不知道自己会不会过.学习 PMP 这三个月还是很充实的.不断的看视频,做题目,功夫不负有心人,也算是学到了一些东西.至少知道了一个项目的启 ...
- adb 命令收藏学习地址
adb 命令相关的网页https://www.cnblogs.com/medsonk/p/8334847.htmlhttps://www.cnblogs.com/medsonk/p/6959658.h ...