Android 多屏幕适配 dp和px的关系
2015-01-12 00:11
190 查看
一直以来别人经常问我,android的多屏幕适配到底是怎么弄,我也不知道如何讲解清楚,或许自己也是挺迷糊。
以下得出的结论主要是结合官方文档进行分析的https://developer.android.com/guide/practices/screens_support.html
android由于碎片化太严重,而导致市面上出现非常多的种类尺寸手机设备,当然也包括非常奇葩的分辨率手机。所以我们在布局的时候使用px作为单位显然不能很好的做到多屏幕的适配。其实在官方文档中有介绍一种解决多屏幕适配的问题的尺寸单位dp/dip(Density-independent pixel )
文档中也给出了px和dp之间的关系表达式:px = dp * (dpi / 160) 其中dpi表示的是设备屏幕密度,不同的设备dpi可能不一致。
例如在一个dpi为240的设备屏幕中,1个dp等价于2个px,也就是一个dp长度下包含2个px,如果dp与px的倍数越大,屏幕看起来也就越清晰。
谷歌已经针对dpi进行了分类:
A set of six generalized densities:
ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi
上述表述可以看出他是一个区间的,并不是一个固定的值。
基于px和dp的关系式。假如在屏幕像素为800*1280,dpi为240的设备上,dp的总长度只有600dp
在屏幕像素为800*1280 ,dpi为320的设备上,dp的总长度只有400dp
以下是测试代码,来验证dp的实际长度
720*1280 320dpi 480*800 160dpi 480*800 240dpi
dp总长度为360dp dp的总长度为480dp dp的总长度为320dp
总结一
一般情况下如果屏幕分辨率和屏幕密度成一定比例的关系,那么不管分辨率多大,得出的dp总长度将会在一定的范围内。那么使用dp作为单位将能很好的解决多分辨率适配的问题。
然而由于设备屏幕分辨率和屏幕密度并不是成一个固定的比例,所以全部用dp的写,似乎不是很好。建议使用warp_content 和match_parent来配合使用。对于布局的高宽没有明确限制的,尽量结合相对布局和权重来表示,这样不管在什么分辨率下,界面的样式不会错乱。
以下得出的结论主要是结合官方文档进行分析的https://developer.android.com/guide/practices/screens_support.html
android由于碎片化太严重,而导致市面上出现非常多的种类尺寸手机设备,当然也包括非常奇葩的分辨率手机。所以我们在布局的时候使用px作为单位显然不能很好的做到多屏幕的适配。其实在官方文档中有介绍一种解决多屏幕适配的问题的尺寸单位dp/dip(Density-independent pixel )
文档中也给出了px和dp之间的关系表达式:px = dp * (dpi / 160) 其中dpi表示的是设备屏幕密度,不同的设备dpi可能不一致。
例如在一个dpi为240的设备屏幕中,1个dp等价于2个px,也就是一个dp长度下包含2个px,如果dp与px的倍数越大,屏幕看起来也就越清晰。
谷歌已经针对dpi进行了分类:
A set of six generalized densities:
ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi
上述表述可以看出他是一个区间的,并不是一个固定的值。
基于px和dp的关系式。假如在屏幕像素为800*1280,dpi为240的设备上,dp的总长度只有600dp
在屏幕像素为800*1280 ,dpi为320的设备上,dp的总长度只有400dp
以下是测试代码,来验证dp的实际长度
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#f00" android:src="@drawable/ic_launcher" /> <ImageView android:layout_width="100dip" android:layout_height="40dip" android:src="#0f0" /> <ImageView android:layout_width="200dip" android:layout_height="40dip" android:src="#0fa" /> <ImageView android:layout_width="300dip" android:layout_height="40dip" android:src="#0ff" /> <ImageView android:layout_width="400dip" android:layout_height="40dip" android:src="#09f" /> </LinearLayout>
720*1280 320dpi 480*800 160dpi 480*800 240dpi
dp总长度为360dp dp的总长度为480dp dp的总长度为320dp
总结一
一般情况下如果屏幕分辨率和屏幕密度成一定比例的关系,那么不管分辨率多大,得出的dp总长度将会在一定的范围内。那么使用dp作为单位将能很好的解决多分辨率适配的问题。
然而由于设备屏幕分辨率和屏幕密度并不是成一个固定的比例,所以全部用dp的写,似乎不是很好。建议使用warp_content 和match_parent来配合使用。对于布局的高宽没有明确限制的,尽量结合相对布局和权重来表示,这样不管在什么分辨率下,界面的样式不会错乱。
相关文章推荐
- Android 多屏幕适配 dp和px的关系 最好用dp
- Android屏幕适配 px,dp,dpi及density的关系与深入理解
- Android中dp,px,sp概念梳理以及如何做到屏幕适配
- android 的屏幕适配问题,dp与px的换算
- Android屏幕适配dp、px两套解决办法
- 关于Android中涉及屏幕适配的单位dp,px,sp,dip的学习笔记。
- Android中dp,px,sp概念梳理以及如何做到屏幕适配
- [转]Android中dp,px,sp概念梳理以及如何做到屏幕适配
- Android屏幕适配(一)dp、px、dpi、sp的理解
- Android屏幕适配dp、px两套解决办法
- Android手机适配问题【autolayout】,【.9制作】【获取手机屏幕的宽高】【px,dp转换】
- Android屏幕适配相关(px,dp,dpi等)
- Android中dp,px,sp概念梳理以及如何做到屏幕适配
- 快速开发12之屏幕适配—android dp和px之间转换
- Android之px/dpi/dip/dp/density/DisplayMetrics和屏幕适配
- android开发之dip、dp、sp、pt和px的区别以及屏幕密度略谈(外加屏幕适配)
- Android中dp,px,sp概念梳理以及如何做到屏幕适配
- 【转】Android中dp,px,sp概念梳理以及如何做到屏幕适配
- 关于android屏幕适配的问题(drawable-xxxxxxxx,dp,sp,px等等),偶尔看到了android源码,关于dpi的区分的值
- Android中dp,px,sp概念梳理以及如何做到屏幕适配