android UI 适配小节
一、 像素密度表
- 像素密度表
- 比如UE 给了三张切图分别对应:
mdpi, xhdpi, xxdpi
10 * 10, 20 * 20, 30 * 30
上面的值都是px,那么,可以将图片分别放在res/下的对应文件夹中,并在布局文件中为使用到到该图片的地方定义为高宽为10dp(或wrap_content),则系统在运行时,会根据当前设备的屏幕像素密度值从对应的文件夹下取图片,例如xhdpi时,就会取20*20的图片。
- UI 高宽值设定
有时感觉很恐慌,似乎 mdpi,xhdpi, xxdpi三种屏幕都要适配,其实不然。在AS中,选中一种用来的布局的模拟器屏幕,比如:Nexus 5 (5.0 , 1080 X 1920,xxhdpi),拿到三张图后,分别丢到三个对应的文件夹下,然后注意到xxhdpi的图片为30px,所以在指定具体的高宽值时,指定为10dp(xxhdpi下,1dp=3px)值即可,其它可以放心忽略;如果你不放心,在回头检查下会发现,xhdpi下,10dp=20px,这是正好系统取xhdpi文件下的图片,它的高宽值也正好适合。
- 一个血的教训
某天晚上,在适配一个UI时,UE给了我两套图,分别是对应放大三倍 (96 X 96)、和放大两倍(64 X 64),我拿到图后,直接将其丢在了xxxhdpi、xxhdpi两个文件下,然后取Nexus 5 (5.0 , 1080 X 1920)模拟器预览,使用wrap_content参数进行指定控件的高宽值,发现图片远远不及屏幕宽度的1/10(96/1080),而使用直接指定为96px和32dp时都差不多,不管我怎么折腾都是这样的效果,结果就吃到了公司提供的加班夜宵和享受了公司的加班免费打车服务;外加,半夜回去的郁闷了一个晚上。结果第二天早上,资深的同事到来后,一咨询,立马解决问题:
解决步骤:
1, 将放大两倍(64 X 64)的图片挪到了xhdpi文件夹下;
2, 将放大三倍(96 X 96)的图片挪到了xxhdpi文件夹下;
3, 在布局控件中指定高和宽分别为32dp;
4, 再一次使用Nexus 5 (5.0 , 1080 X 1920)模拟器预览,
果然和预期中的一模一样。
然后我带着一脸的懵逼,一愣一愣的听大牛说问题的原因:
1,没有注意到Nexus 5模拟器的像素密度为xxdpi;
2,没理解xhdpi和xxhdpi下的1dp=2dx和1dp=3dx的事实,所以放大三倍的应该是放在xxhdpi文件下,同理放大两倍放在xhdpi下。
3,出现使用wrap_content参数时为什么不到1/10?因为那时选中的是xxhdpi文件夹下的图片64*64,当然不到。
4,出现使用96px和32dp时为什么就符合预期呢?xxhdpi下,1dp=3px,96px=32dp,这是系统发现xxhdpi文件夹下的图片为64X64,主动把图片拉升以满足我指定的大小,然后我在一次在真机上运行,果然,图片失真了。
二、 常见的屏幕类别
- 4:3
VGA 640*480 (Video Graphics Array)
QVGA 320*240 (Quarter VGA)
HVGA 480*320 (Half-size VGA)
SVGA 800*600 (Super VGA)
- 5:3
WVGA 800*480 (Wide VGA)
- 16:9
FWVGA 854*480 (Full Wide VGA)
HD 1920*1080 High Definition
QHD 960*540
720p 1280*720 标清
1080p 1920*1080 高清
三、记住
- 屏幕大小和屏幕的像素密度没有任何关系,并不能从一个设备的屏幕分辨率区分出它的具体像素密度值。
android UI 适配小节的更多相关文章
- android多分辨率多屏幕密度下UI适配方案
相关概念 分辨率:整个屏幕的像素数目,为了表示方便一般用屏幕的像素宽度(水平像素数目)乘以像素高度表示,形如1280x720,反之分辨率为1280x720的屏幕,像素宽度不一定为1280 屏幕密度:表 ...
- Android 目前最稳定和高效的UI适配方案
Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解.刚好,近期准备对糗事百科Android客户端设计 ...
- 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)
来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ...
- Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。
Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...
- Android屏幕适配全攻略(最权威的官方适配指导) (转)
招聘信息: Cocos2d-X 前端主程 [新浪微博]手机客户端iOS研发工程师 20k-40k iOS 开发工程师 iOS高级开发工程师(中国排名第一的企业级移动互联网云计算公司 和创科技 红圈营销 ...
- Android UI开发第四十一篇——墨迹天气3.0引导界面及动画实现
周末升级了墨迹天气,看着引导界面做的不错,模仿一下,可能与原作者的代码实现不一样,但是实现的效果还是差不多的.先分享一篇以前的文章,android动画的基础知识,<Android UI开发第十二 ...
- Android分辨率适配心得
关于Android分辨率适配,这个是Android开发很头疼的一个问题,也需要花费相当一部分开发时间处理的一个问题,往往一个界面怎么适配就得想半天,特别是新手,也经常有人问我是怎么适配分辨率的,我也不 ...
- Android UI基础之五大布局
Android UI基础之五大布局 Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Andro ...
- Android多分辨率适配经验总结
Android多分辨率适配是一件很有意义但是比较麻烦的事情,网上有很多关于多分辨率适配的文章,多数文章讲解的都是整个APP的图片比较规则,可以将图片做成9图来完成多分辨率适配,但是对于一些游戏类应 ...
随机推荐
- rman catalog配置简要笔记
服务端配置: SQL> create tablespace tbs_rman datafile 'H:\oradata\test\tbs_rman.dbf' size 20m autoexten ...
- NServiceBus入门:发送一个命令(Introduction to NServiceBus: Sending a command)
原文地址:https://docs.particular.net/tutorials/intro-to-nservicebus/2-sending-a-command/ 侵删. 能够发送和接收mess ...
- 让你的WPF程序在Win7下呈现Win8风格主题
今天在Win8下使用了一个我之前写的一个WPF程序的时候,发现现在也支持Win8效果了(记得以前的.net 4.0的版本是不支持的).由于WPF的控件是自绘的,并不受系统主题所控制,也就是说.net ...
- Eclipse环境安装C/C++插件CDT和Eclipse安装的插件卸载(删除)
http://blog.csdn.net/typa01_kk/article/details/49252513
- rust安装
http://blog.csdn.net/teamlet/article/details/50838996
- sql server的sql 语句中的列名包含[]时候,把]替换成]]就可以
sql server的sql 语句中的列名包含[]时候,把]替换成]]就可以eg: create table p.e_LOG_WebServer ( [BSCFlg] int, ), ) ); sel ...
- .Net的差评
.NET平台很棒.真的很棒.直到它不再那么棒.我为什么不再用.NET?简单来说,它限制了我们选择的能力(对我来说很重要),转移了我们的注意力,使得我们向内认知它的安全性,替代了帮助我们认知外面广阔世界 ...
- Lua学习之类型与值
Lua是一种动态语言,在语言中没有类型定义的语法. 在lua中有8中基本的类型: 1.nil(空) 2.boolean 3.number(数字) 4.string(字符串) 5.userdata(自定 ...
- 翻译:Spring-Framework-Reference Document:15.2-DispatcherServlet
写在前面的话: 最近被项目的代码折腾的死去活来的,其实框架也没有那么难理解,只是自己的Web基础太差,被Request和Response这一对神雕侠侣坑到泪流满面!今天捣腾了一下Spring We ...
- 初始加载时edittext不自动获取焦点的方法
在做一个搜索功能时,刚进入界面,edittext直接自动获取焦点,这显然不是我想要的. 那么问题来了:如何关闭EditText自动获取焦点的? 尝试了好几个方法,在Java代码添加focus控制,在x ...