一、相关知识点:
1.首先先了解五个东西:dp 、dip、dpi、density 、屏幕大小
dip : Density independent pixels ,设备无关像素。
dp :就是dip
dpi :像素密度 , 直接来说就是一英寸多少个像素点。常见取值 120,160,240
density : 密度。常见取值 1.5 , 1.0 。和标准dpi的比例(160px/inc)
屏幕大小:屏幕大小是手机对角线的物理尺寸,以英寸(inch)为单位。比如某某手机为“5寸大屏手机”,就是指对角线的尺寸,5寸×2.54厘米/寸=12.7厘米。
换算公式:
dp = dpi /(160像素/英寸)) px = density * dp
也就是说dp与屏幕密度有关,所以在对控件的长宽设置时使用dp的话,他显示时会根据设备的屏幕密度计算出px值,实现适配。
2.Android中获取到dp与density:
DisplayMetrics metrics=new DisplayMetrics();
WindowManager m=(WindowManager) getApplication().getSystemService(Context.WINDOW_SERVICE);
m.getDefaultDisplay().getMetrics(metrics);
System.out.println("++++++++++++++++++++++++++"+metrics.density);
System.out.println("++++++++++++++++++++++++++"+metrics.densityDpi);
除此之外也可以进行dp与px的转换,通过获取到设备的密度density ,利用PX = density * DP
每部安卓手机屏幕都有一个初始的固定密度,这些数值是120、160、240、320、480,我们权且称为“系统密度”。240×320的屏幕是低密度120dpi,即ldpi;320×480的屏幕是中密度160dpi,即 mdpi;480×800的屏幕是高密度240dpi,即hdpi;720×1280的屏幕是超高密度320dpi,即xhdpi;1080×1920的 屏幕是超超高密度480dpi,即xxhdpi。
二、Android不同分辨率屏幕的适配做法小结
1.尽可能使用dp,字体使用sp。
这里注意的是,textview控件,利用代码创建出来的的时候,setext(float textsize);这个textsize设进去会转换为sp,所以不要转换了。
如果是在代码中设置时,可以通过获取到density后进行dp与px的转换,尽量使用dp。
2.在drawable 、 drawable-hdpi、 drawable-mdpi 、drawable-xhdpi 、drawable-xxhdoi文件夹下放不同分辨率的图片,系统会自动根据设备屏幕密度加载不同文件夹下面的图片。
3.对于不同的屏幕大小创建不同的layout。
a.首先在manifest里面设置要支持的屏幕:
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true" />
b.在res文件夹下面创建layout-large 、layout-small 、layout -normal 文件夹,放置对于不同屏幕大小的布局文件,系统的根据设备情况加载相应的布局。
4.可以创建不同的values文件夹,存放不同尺寸的图片去支持不同屏幕。
5.对于布局的或者view的大小设置,可以通过获取屏幕的大小然后拿屏幕的比例大小去设置,比例大小可以通过判断屏幕大小的值的动态获取。
6.一直觉得如果使用屏幕百分比去调整尺寸,将非常好的完成适配问题,起码很大程度上做到了。所以做法是5的做法,后来发现了一个有个开源的百分比布局 。所以现在我做法是,图片只只使用最大尺寸的,那么只保留一份,然后使用百分比布局,按照屏幕的百分百尺寸,基本能绝大多数的需求了。