Android 屏幕兼容性

[b]以下内容只是对Supporting Multiple Screens这部分文档的总结,只是对初看者启到一个提示作用,如果看完后还是不能有一个很好的理解,可以参考文档[/b]


[b][size=medium]基本概念[/size][/b]
屏幕大小:以对角线的长度来衡量屏幕的大小

分辨率:屏幕上的像素个数。如320x480,就表示宽方向有320个像素,高方向有480个像素,整个屏幕有153,600个像素。

宽高比:宽的物理长度/高的物理长度,如:6cm/8cm。而不是用像素的比值来表示,如320/480。

屏幕密度:也可以是像素密度,即单位面积上存在多少个像素,单位是dpi。160dpi就是单位面积上有160个像素,240dpi就是单位面积上有240个像素。
屏幕的密度是由分辨率和屏幕大小(物理尺寸)决定的,320x480的分辨率在3寸的屏幕上与6寸的屏幕上密度是不同的。

dp(dpi):与像素无关的大小单位,将dp作为单位的可以看作是物理值。android将160dp作为一个标准(即单位面积上有160个像素点时),此时1dp=1px;当将1dp放到240dp的屏幕上去时,android就会自动将1dp调整为1.5px。

android将所有的密度泛化为:ldpi, mdpi, hdpi。将屏幕大小泛化为small, medium, large, xlarge。

[img]http://dl.iteye.com/upload/attachment/530154/0a469861-d8b3-3781-a0b5-c259761d2b47.png[/img]


[b][size=medium]Manifest.xml中的support-screens元素[/size][/b]
<support-screens
android:smallScreens="false"
android:mediumScreens="false"
android:largeScreens="false"
android:xlargeScreens="false"
android:anyDensity="false"
/>

anyDensity:程序是否可在任何密度的屏幕上运行。该值主要是为使用了px作为单位的程序设计的。
设为false时,anroid会启用density-compability特性,根据不同的屏幕密度将px值转换为合理的大小。
设为true时,就会关闭density-compability特性。
如果程序是以dp作为长度单位的,无论设为false, true都可以。

xxxScreens:是否支持某屏幕。
设为false时,表示不支持该大小的屏幕,android会启用size-compability特性,即只显示标准屏幕(normal size, mdpi)的大小。
设为true时,表示支持该大小的屏幕,android就不会做任何处理,将程序直接显示。


[b][size=medium]Manifest.xml中的uses-sdk元素[/size][/b]
<uses-sdk
android:minSdkVersion="integer"
android:targetSdkVersion="integer"
android:maxSdkVersion="integer"
/>
minSdkVersion:标识程序可以在低版本的andriod系统上运行,且最低的版本是多少。默认时为1

targetSdkVersion:该值主要是会影响support-screens元素中的属性的默认值。

maxSdkVersion:程序最高可运行在什么版本的android系统上,该属性一般不需要设置,android 2.0.1之后,android也不会去检查该属性,只有android market才会用到。


[b][size=medium]android为兼容多分辨率提供的兼容特性[/size][/b]
density-compatibility:
1. dp,密度无关的单位
2. 根据屏幕密度将px转换为合理的值
3. pre-scale bitmap,根据当前的屏幕,从具有相应后缀的资源目录中加载资源(如:drawable-hdpi);同时,在相应后缀中无法找到指定资源时,就加载默认资源目录(drawable或drawable-mdpi)中的资源,并进行相应的缩放。
4. auto-scale bitmap,自己创建bitmap时,android会为对其进行缩放。

size-compatibility:
在support-screens的xxxScreen属性设为false,就会启用该特性。就是当程序运行在大屏幕上时,还是以正常屏幕的大小显示,其余的部分留黑。


[b][size=medium]屏幕密度,分辨率等数据获取和转换[/size][/b]

DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();

displayMetrics.density; // density比例,160dpi的为1,240dpi的为1.5(以160dpi为标准,240/160dpi)

displayMetrics.densityDpi; // 屏幕密度。160dpi,240dpi等
displayMetrics.scaledDensity; // 字体缩放比例

displayMetrics.heightPixels; // 高上有多少个像素
displayMetrics.widthPixels; // 宽上有多少个像素

displayMetrics.xdpi; // 以dp值来表示的宽
displayMetrics.ydpi; // 以dp值来表示的高
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值