参考文章:
http://blog.sina.com.cn/s/blog_74c22b210100tn3o.html
http://www.androidlearner.net/android-multi-screen-about.html
http://www.2cto.com/kf/201109/104910.html
http://blog.csdn.net/lnb333666/article/details/7772569
http://www.penddy.com/a-variety-of-screen-adaptation-of-android.html
屏幕密度:dpi;每英寸上的像素点数。android中分为low、medium、high、extra high。
像素:其实是像素面积,显示一个颜色所需要的面积,由硬件水平决定,面积越小,每英寸上容纳的像素点越多,dpi越大,图像就越精细。
ppi:图像分辨率,每英寸显示的像素点数。
dpi:设备分辨率,打印机上每英寸打印出的点数。
屏幕的实际大小:对角线长度。
方向:横屏和竖屏。
分辨率(resolution):总像素数。对屏幕适配一般不关注分辨率,只关注屏幕大小和密度。
与密度无关像素:dp或者dip,px=dp*(dpi/160);类似的还有sp。
如何判断dpi、mdpi、hdpi和extra hdpi?
大概计算方法如下,以宽为例:
1.比如分辨率为320×480,则长宽比为1:1.5
2.比如屏幕尺寸为3.6”,则根据勾股定理,”长^2+宽^2=3.6^2″,即”宽^2+2.25*宽^2=12.96″,得出”宽^2=12.96/3.25″,则”宽=(12.96/3.25)^(1/2)= 1.9969″
3.宽为320px,分布在1.9969”上,因此密度为320/1.9969=160.2467
4.因此此密度为mdpi的密度
适配多屏幕一般掌握的原则:1.清单文件中添加适配多屏幕的配置代码:
<supports-screens android:largeScreens="true"
android:normalScreens="true" android:anyDensity="true"
android:smallScreens="true"></supports-screens>
2.对于布局:建立不同的文件夹,尽量使用dp、包裹或者填充,而不是使用px。
3.对于图片:
应尽量使用点9格式的图片,如需对密度为low的屏幕提供合适的图片,需新建文件夹drawable-ldpi/,并放入合适大小的图片。相应的,medium对应drawable-mdpi /,high对应drawable-hdpi/,extra high对应drawable-xhdpi/。
图片大小的确定:low:medium:high:extra high比例为3:4:6:8。举例来说,对于中等密度(medium)的屏幕你的图片像素大小为48×48,那么低密度(low)屏幕的图片大小应为36×36,高(high)的为72×72,extra high为96×96。
4.demins的使用:
有时候会根据需要在代码中动态地设置某个值,比如地图,地图的pin和地图的地址提示框的相对偏移量在不同密度的手机上是不同的。这时候可以通过以下方法求出屏幕密度:
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int densityDpi = metric.densityDpi;
然后可以在代码中为这几种密度分别设置便宜量
但是这种方法最好不要使用,最好的方式是在xml文件中不同密度的手机进行分别设置。
这里地图的偏移量可以在values-hpdi,values-mdpi,values-ldpi三种文件夹中的dimens.xml文件进行设置
值得一提的是:
这里的负数是完全起作用的,系统会认为它是一个负值
如一个例子:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:layout_width="@dimen/imagewidth"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- values-hdpi 480X800 -->
<dimen name="imagewidth">320dip</dimen>
</resources>
<resources>
<!-- values-hdpi-1280x800 -->
<dimen name="imagewidth">320dip</dimen>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- values-hdpi 480X320 -->
<dimen name="imagewidth">320dip</dimen>
</resources>
5.菜单和应用图标
这一部分在官方资料中描述的很全面,只是不少应用开发者没有按照规范来,比如桌面图标的在hdpi上分辨率虽然定义的是72×72,但实际上应该只占60×60(如果是正方形,则应该是56×56),而不少应用直接把图标设定为72×72,所以会发现android中很多图标比系统的图标大一些,就是这个缘故。
这一部分就直接参照官方文档吧,做法上也就是做三份,只是需要遵照文档来。
http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
最后,如何理解:分辨率越高,固定像素的图片就显示越小。
分辨率高-单位长度的像素点多-像素面积小-图片小。