android 常见的解决(mdpi、hdpi 、xhdpi、xxhdpi )屏幕调整
查询到执行的system service后,就能够在dumpsys后面加上service的名字,查看指定的service信息。
adb shell dumpsys activity
adb shell dumpsys cpuinfo
adb shell dumpsys battery
adb shell dumpsys window(最后部分能够看到分辨率的信息)=====
-------------------------------------------------
Android Developers关于dp的文档我看过N次,那个px和dp的转换公式我记得非常清楚: px = dp * (dpi /
160),原来这里的dpi是归一化后的dpi,可能值仅仅有120(low)、160(medium)、240(high)、 320(xhigh)四种,而我之前理解的居然是实际设备真实的dpi!
-------------------------------------------------------------------------------------------
1 Android手机眼下常见的分辨率
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 高清
1.2 分辨率相应DPI
"HVGA mdpi"
"WVGA hdpi "
"FWVGA hdpi "
"QHD hdpi "
"720P xhdpi"
"1080P xxhdpi " =======》看清
2 屏幕适配的注意事项
2.1.1 AndroidManifest.xml设置
在中Menifest中加入子元素
android:anyDensity="true"时,应用程序安装在不同密度的终端上时,程序会分别载入xxhdpi、xhdpi、hdpi、mdpi、ldpi目录中的资源。
相反,假设设为false,即使在目录下拥有同样资源,应用不会自己主动地去对应目录下寻找资源:
1) 假设drawable-hdpi、drawable-mdpi、drawable-ldpi三个目录中有同一张图片资源的不同密度表示,那么系统会去载入drawable_mdpi目录中的资源;
2) 假设drawable-hpdi中有高密度图片,其他两个目录中没有相应图片资源,那么系统会去载入drawable-hdpi中的资源,其他同理。
3) 假设drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有。系统会载入drawable-mdpi中的资源,其它同理。使用最接近的密度级别。
2.1.2 横屏竖屏文件夹区分
1) drawable
a) drawable-hdpi该图片即适用于横屏,也适用于竖屏;
b) drawable-land-hdpi,当屏幕为横屏。且为高密度时。载入此目录的资源;
c) drawable-port-hdpi,当屏幕为竖屏,且为高密度时。载入此目录中的资源。其它同理。
2) layout
在res文件夹下建立layout-port和layout-land两个文件夹,里面分别放置竖屏和横屏两种布局文件。以适应对横屏竖屏自己主动切换。
2.2 多屏幕适配的4条黄金原则
1) 在layout文件里设置控件尺寸时应採用fill_parent、wrap_content、match_parent和dp。
详细来说。设置view的属性android:layout_width和android:layout_height的值时。wrap_content,match_parent或dp比px更好。文字大小应该使用sp来定义。
2) 在程序的代码中不要出现详细的像素值。在dimens.xml中定义;
为了使代码简单,android内部使用pix为单位表示控件的尺寸,但这是基于当前屏幕基础上的。为了适应多种屏幕。android建议开发人员不要使用详细的像素来表示控件尺寸。
3) 不使用AbsoluteLayout(android1.5已废弃) ,能够使用RelativeLayout替代;
4) 对不同的屏幕提供合适大小的图片。
不同大小屏幕用不同大小的图片,low:medium:high:extra-high图片大小的比例为3:4:6:8;举例来说,对于中等密度(medium)的屏幕你的图片像素大小为48×48。那么低密度(low)屏幕的图片大小应为36×36,高(high)的为72×72。extra-high为96×96。
2.3 使用9-patch PNG图片
使用图片资源时,假设出现拉伸,由于图片处理的原因。会变形。导致界面走形。9-patch PNG图片也是一种标准的PGN图片,在原生PNG图片四周空出一个像素间隔,用来标识PNG图片中哪些部分能够拉伸、哪些不能够拉伸、背景上的边框位置等。
“上、左”定义可拉伸区域
“右、下”定义显示区域,假设用到完整填充的背景图。建议不要通过android:padding来设置边距,而是通过9-patch方式来定义。
Android SDK中提供了编辑9-Patch图片的工具,在tools文件夹下draw9patch.bat,可以立马看到编辑后的拉伸效果,也可以直接用其它图片编辑工具编辑,可是看不到效果。
2.4 不同的layout
Android手机屏幕大小不一,有480x320, 640x360, 800x480……
如何才干让Application自己主动适应不同的屏幕呢?
事实上非常easy。仅仅须要在res文件夹下创建不同的layout文件夹,比方:layout-640x360、layout-800x480……全部的layout文件在编译之后都会写入R.java里,而系统会依据屏幕的大小自己选择合适的layout进行使用。
总结:最好在mainifest里面加入
<!--对于非常高的分辨率,除採用对应的图片外,还须要加上例如以下配置,来更好的适配屏幕 -->
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:anyDensity="true" />
in
表示英寸,是屏幕的物理尺寸。
每英寸等于2.54厘米。比如我们常常说的手机屏幕大小有,5(英)寸、4(英)寸就是指这个单位。这些尺寸是屏幕的对角线长度。假设手机的屏幕是4英寸,表示手机的屏幕(可视区域)对角线长度是4 X 2.54 = 10.16厘米
dpi
dpi是Dots Per Inch的缩写, 每英寸点数,即每英寸包括像素个数。比方320X480分辨率的手机,宽2英寸。高3英寸, 每英寸包括的像素点的数量为320/2=160dpi(横向)或480/3=160dpi(纵向),160就是这部手机的dpi,横向和纵向的这个值都是同样的。原因是大部分手机屏幕使用正方形的像素点。
density
屏幕密度,density和dpi的关系为 density = dpi/160
dp
也即dip,设备独立像素,device independent pixels的缩写,Android特有的单位,在屏幕密度dpi = 160屏幕上,1dp = 1px。
sp
和dp非常类似。一般用来设置字体大小。和dp的差别是它能够依据用户的字体大小偏好来缩放。
Android Drawable
我们新建一个Android项目后应该能够看到非常多drawable目录。分别相应不同的dpi
drawable-ldpi (dpi=120, density=0.75)
drawable-mdpi (dpi=160, density=1)
drawable-hdpi (dpi=240, density=1.5)
drawable-xhdpi (dpi=320, density=2)
drawable-xxhdpi (dpi=480, density=3)
市面上的一些Android教程大多都是教的是为每种dpi都出一套图片资源,这个固然是一种解决的方法。但同一时候也是一种非常笨的方法,为美工或者设计添加了不少的工作量不说。同一时候也会让你的apk包变的非常大。那么有没有什么好的方法既能保证屏幕适配,又能够最小占用设计资源,同一时候最好又仅仅使用一套dpi的图片资源呢?
首先必须清晰一个自己主动渲染的概念,Android SDK会自己主动屏幕尺寸选择相应的资源文件进行渲染。如SDK检測到你手机dpi是160的话会优先到drawable-mdpi目录下找相应的图片资源,注意仅仅是优先。假设你手机dpi是160,可是你仅仅在xhpdi目录下有相应的图片资源文件。程序一样能够正常执行。
所以理论上来说仅仅须要提供一种规格的图片资源就ok了,假设仅仅提供ldpi规格的图片。对于大分辨率的手机假设把图片放大就会不清晰,所以须要提供一套你须要支持的最大dpi的图片。这样即使用户的手机分辨率非常小,这样图片缩小依旧非常清晰。
xhdpi成为首选
上面说了仅仅须要提供一套大的dpi的图片就ok了,如今市面手机分辨率最大可达到1080X1920的分辨率。如Nexus5。dpi属于xxhdpi,可是毕竟还没普及,眼下市面上最普遍的高端机的分辨率还多集中在720X1080范围,也就是多集中在xhdpi。所以眼下来看xhpdi规格的图片成为了首选。当然随着技术规格的提高以后发展,以后可能市场上xxdpi的手机会越来越普遍。但这是后话。 设计资源紧张怎么办?
在如今的App开发中,基本都会有iOS和Android版本号。有些公司为了保持App不同版本号的体验交互一致。还有些公司的设计资源可能比較紧张。这些情况下iOS和Android版本号基本是一个设计师主导,而大多数情况下设计师可能更会以iPhone手机为基础进行设计,包含后期的切图之类的。这个时候身为Android开发者你是否还要求设计师单独为Android端切一套图片资源呢?这会让你们的设计师崩溃的。以下就来告诉一个项目中总结的更棒的方法。
相信设计师们一般都会用最新的iPhone5(5s和5的尺寸以及分辨率都一样)来做原型设计,而iPhone5的屏幕分辨率为640X1164, 屏幕尺寸为4英寸。依据勾股定理(a^2 + b^2 = c^2)640^2+1164^2=1764496, 然后那么其根源,可以得到屏幕对角线,分辨率:1328,除以4可以得出iphone5的dpi:1328/4≈332 如可以看到的iPhone5屏幕dpi约等于320, 只属于xhdpi,所以你说有没有专门为设计师,你可以很自豪Android结束切图,直接到iPhone一个切图像资源进drawable-xhdpi目录里ok该。
android 常见的解决(mdpi、hdpi 、xhdpi、xxhdpi )屏幕调整的更多相关文章
- 一分钟了解Android横竖屏 mdpi hdpi xhdpi xxhdpi xxxhdpi (转)
转自:http://blog.csdn.net/a704755096/article/details/46342689 DPI:每英寸像素数 简单的屏幕分辨率计算方法: DisplayMetrics ...
- 一分钟了解Android横竖屏 mdpi hdpi xhdpi xxhdpi xxxhdpi
DPI:每英寸像素数 简单的屏幕分辨率计算方法: DisplayMetrics metrics = this.getResources().getDisplayMetrics(); float den ...
- Android设备真实DPI与系统标示DPI——ldpi/mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi
1.设备真实DPI与系统标示DPI 2.drawable允许的标示DPI值 drawable文件的合法名称如下: 3.如何验证 Demo如下,建立不同dpi的drawa ...
- 【原】android【手机】屏幕适配解决方案,完美适配适配hdpi,xhdpi,xxhdpi的做法。
1.先说要怎么做,后面在慢慢讲解: 2.现在来讲解为什么要放这三套: 这三套其实按内容来说就两种,为什么这两种可以适配hdpi,xhdpi,xxhdpi呢? 那么两种类型的dimens就可以了,为什么 ...
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事
1.1 手机常见分辨率: 4:3VGA 640*480 (Video Graphics Array)QVGA 320*240 (Quarter VGA)HVGA 480*320 (Half ...
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
1 Android手机目前常见的分辨率 1.1 手机常见分辨率: 4:3VGA 640*480 (Video Graphics Array)QVGA 320*240 (Quarter VGA ...
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )屏幕适配
http://www.tuicool.com/articles/nuyMZb 1 Android手机目前常见的分辨率 1.1 手机常见分辨率: 4:3 VGA 640*480 (Video G ...
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配
1 Android手机目前常见的分辨率 1.1 手机常见分辨率: 4:3VGA 640*480 (Video Graphics Array)QVGA 320*240 (Quarter VGA ...
- android 屏幕适配,hdpi,xhdpi,xxhdpi理解,常见出图
屏幕适配 首先理解下各个尺寸单位代表的意思 尺寸含义 px: 像素 dip: Density-independent pixel 独立像素密度 dpi: dot per inch 分辨率 ppi: p ...
随机推荐
- 鸟哥Linux私房菜知识点总结6到7章
近期翻看了一本<鸟哥的Linux私房菜>.这是一本基础的书,万丈高楼平地起.会的不多但能够学.这是我整理的一些知识点.尽管非常基础.希望和大家共同交流. 第6章主机规划与磁盘分区 1.在进 ...
- DataTable数据转换为实体
我们在用三层架构编写软件时,常常会遇到例如以下问题,就是三层之间的參数传递问题:假设我们在D层查询出数据是DataTable类型的,那么我们在B层甚至U层使用这条数据时,就要用DataTable类型来 ...
- Android开发 更改返回button的图标
非常多的Android应用左上角都有返回button 在默认的情况下 ADT会默认给一个返回图标 而作为开发需求 非常多都要求定制一个新的图标 在Android的站点上 发现了2种能够更改的方法 1. ...
- 初步C++运算符重载学习笔记<3> 增量递减运算符重载
初步C++运算符重载学习笔记<1> 初探C++运算符重载学习笔记<2> 重载为友元函数 增量.减量运算符++(--)分别有两种形式:前自增++i(自减--i).后自增i ...
- HDU 1226 超级密码 (搜素)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1226 题意简单,本来是一道很简单的搜素题目. 但是有两个bug: 1.M个整数可能有重复的. 2.N可 ...
- PHP监測memcache服务端的执行状况
. 代码例如以下,代码为memcache官方代码,引用在此.做一下简单的说明: 1.设置username和password define('ADMIN_USERNAME','admin'); // A ...
- 静态网页VS动态网页
干<沙朗新闻发布系统>什么时候.我们已经建立的网页.html的,并且.aspx,第一次接触.我认为这些东西是一样的,因为它,在观看ASP.NET视频的时候.听见里面讲课的老师有提到了这两样 ...
- 从零開始学android<SeekBar滑动组件.二十二.>
拖动条能够由用户自己进行手工的调节,比如:当用户须要调整播放器音量或者是电影的播放进度时都会使用到拖动条,SeekBar类的定义结构例如以下所看到的: java.lang.Object ↳ an ...
- Coreseek:indexer crashed神秘
浩哥前两天让我再Coreseek该指数再次这样做,由于需求方面变化不大,公司名称应出现指数.在添加的配置文件的面孔sql_field_string:串场.. 此属性特别有用,因为它不仅作为过滤器的特性 ...
- android--自己定义ProgressDialog显示位置(其他Dialog子类都能够设置)
1.普通情况下,系统默认的Dialog显示位置为屏幕居中: pbDialog = new ProgressDialog(MainActivity.this); pbDialog.setMessage( ...