android的屏幕适配

参考文章:

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;  // 屏幕密度DPI120 / 160 / 240

 

然后可以在代码中为这几种密度分别设置便宜量

 

但是这种方法最好不要使用,最好的方式是在xml文件中不同密度的手机进行分别设置。

这里地图的偏移量可以在values-hpdi,values-mdpi,values-ldpi三种文件夹中的dimens.xml文件进行设置

值得一提的是:

    <dimen name="bitmap_common_topoffset">40dp</dimen>

    <dimen name="bitmap_common_bottomoffset">-14dp</dimen>

这里的负数是完全起作用的,系统会认为它是一个负值


如一个例子:


<?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

最后,如何理解:分辨率越高,固定像素的图片就显示越小。

分辨率高-单位长度的像素点多-像素面积小-图片小。




  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值