分享

android 对于多分辨率屏幕的适配(二)

 东茹阁 2013-07-08
发表于 2013-2-5 16:28:27 |只看该作者 |倒序浏览
0
本帖最后由 597969551 于 2013-2-5 18:24 编辑

支持不同的屏幕密度

一.使用密度无关的像素值
一个通常的误区是在设计布局时使用物理像素单位。不同的设备具有不同的像素密度,因此相同的像素值可能对应不同的物理大小在不同的设备上。因此,当定义单位的时候,常常使用dp或sp。dp是密度无关的像素单位,1dp对应物理屏幕上每英寸160个点数。sp是同样的单位,但他被用来计算文字的大小。
例如,当你需要指定两个视图之间的空间,使用dp而不是px:

代码片段,双击复制
01
02
03
04
<Button android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/clickme"
    android:layout_marginTop="20dp" />

当需要指定文字的大小,通常使用sp:

代码片段,双击复制
01
02
03
<TextView android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp" />


二.提供可替换的图像
因为Android设备的屏幕像素密度不同,需要为不同像素密度的屏幕提供相应的图像资源:low,medium,high,extra-high。

代码片段,双击复制
01
02
03
04
xhdpi: 2.0
hdpi: 1.5
mdpi: 1.0 (baseline)
ldpi: 0.75

这意味着如果你为xhdpi的设备生成一个200*200的图像,那你需要为hdpi的设备生成一个150*150的图像,为mdpi设备生成一个100*100的图像,为ldpi设备生成75*75的图像。而在你的layout文件中,只需要定义该图像的width=100dp,height=100dp。
讨论,2.0:1.5:1.0:0.75的比例转换为整数就是3:4:6:8,个人觉得当设计xhdpi的图片时物理像素xhdpiValue的长宽最好计算为8的倍数,这样在设计其他像素密度的图片时,就可以根据xhdpiValue*3(4或6)/8来计算真实物理图片的像素。

然后,把这些图像文件置于相应的文件目录下面,如下:

代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
MyProject/
  res/
    drawable-xhdpi/
        awesomeimage.png
    drawable-hdpi/
        awesomeimage.png
    drawable-mdpi/
        awesomeimage.png
    drawable-ldpi/
        awesomeimage.png


然后,当你引用到@drawable/awesomeimage,系统会基于设备的dpi选择合适的图像文件。

三.讨论(附加)
虽然谷歌说Android设备的屏幕像素密度遵循0.75:1.0:1.5:2.0的比例,但市场上面有一部分的设备不完全符合上面四种情况,有可能介于两种屏幕密度之间,这样,即使为这四种图片都做了适配,在某些设备上还是会发生图片失真的情况,该如何更好的解决这个问题。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多