Android 小技巧之屏幕适配
2021-06-07 本文已影响0人
Kevin_小飞象
推荐1倍效果图,即采用 720 * 360 大小( 1280 *720:两倍图 \ 1920 * 1080: 三倍图),最主要的原因就是1px = 1dp,效果图标多大的 px,布局就写多大 dp。
定义
-
像素 - px:
一个小黑点就是像素。 -
尺寸:
屏幕的对角线的长度。 -
分辨率:
整个屏幕一共有多少个点,也就是像素。 -
像素密度 - dpi:
- 每英寸中的像素数。
- 假如设备分辨率为320*240,屏幕长2英寸宽1.5英寸,dpi=320/2 = 240/1.5 =160。
- 对应于DisplayMetrics类中属性densityDpi的值。
- 当然这种宽和高的dpi都相同的情况现在已经很少见。
-
设备独立像素 - dip - dp:
1.不同设备有不同的显示效果,不依赖像素。
2.dp = px / density
3.dp = px / (dpi / 160)
4.dpi(像素密度)为160 的设备上1dp = 1px。 -
放大像素 - sp:
用于字体显示。 -
dp转px、px转dp
public class Dp2Px {
public static int dp2px(Context context, int dp) {
return (int) (dp * context.getResources().getDisplayMetrics().density + 0.5);
}
public static int px2dp(Context context, int px) {
return (int) (px / context.getResources().getDisplayMetrics().density + 0.5);
}
}
常见设备的dp、px、density的关系
- ldpi:
density:0.75
分辨率:240*320
关系:dp = px / 0.75
- mdpi:
density:1
分辨率:320 * 480
关系:dp = px / 1
- hdpi:
density:1.5
分辨率:480 * 800
关系:dp = px / 1.5
- xhdpi:
density:2.0
分辨率:720 * 1280
关系:dp = px / 2
- xxhdpi:
density:3
分辨率:1080 * 1920
关系:dp = px / 3
- 获取参数
//以1280*720为基准:
//获取手机屏幕的宽和高
int widthPixels = getResources().getDisplayMetrics().widthPixels;
int heightPixels = getResources().getDisplayMetrics().heightPixels;
//density
float density = getResources().getDisplayMetrics().density;
//dpi
int densityDpi = getResources().getDisplayMetrics().densityDpi;
//1dp = 多少px
int px = Dp2Px.dp2px(this, 1);
//1px = 多少dp
int dp = Dp2Px.px2dp(this, 1);
E/MainActivity: widthPixels: 720
E/MainActivity: heightPixels: 1280
E/MainActivity: density: 2.0
E/MainActivity: densityDpi: 320
E/MainActivity: px:2
E/MainActivity: dp:1
适配
- 图片适配
- 在 AndroidStudio 的资源目录 res 下有五个层级图片文件夹,分别用来存放不同分辨率的图片:
drawable-ldpi :低分辨率(用的少了,一般不再用)
drawable-mdpi:中分辨率
drawable-hdpi:高分辨率
drawable-xdpi:较高分辨率
drawable-xxdpi:超级高分辨率
drawable-xxxhpi:顶级分辨率
- 在对应的文件夹下放置不同分辨率的图片就可以很好的对图片进行适配。
- 随着屏幕越来越大,推荐 xxdpi 的一套切图,这样就可以向下和向上兼容,节省资源。
- 对于图标使用 svg 格式,对于图片仍然使用 png,svg 的图标大小约是 png 的 1/4,在很大的项目中,图标有很多,这个时候svg的优势就凸显无疑了。
- 添加依赖:
implementation 'me.jessyan:autosize:1.2.1'
- 在 AndroidManifest.xml 中配置参数
<!-- 如果您项目中的所有页面都只需要以高或宽中的一个作为基准进行适配的话, 那就只需要填写高或宽中的一个设计图尺寸即可 -->
<manifest>
<application>
...
<meta-data
android:name="design_width_in_dp"
android:value="360"/>
<meta-data
android:name="design_height_in_dp"
android:value="640"/>
...
</application>
</manifest>
- 参考 Demo