文章目录
- 前言
- 详细使用
- 原理
- 补充
前言
不同的手机尺寸不一样,适配也不一样,找到一款屏幕适配框架-AndroidAutoSize,先简单的使用一下,后续在进行补充
详细使用
1.进行依赖
implementation 'me.jessyan:autosize:1.2.0'
2.在AndroidManifest.xml添加
<meta-data
android:name="design_width_in_dp"
android:value="360"/>
<meta-data
android:name="design_height_in_dp"
android:value="640"/>
以上使用的360与640都是已dp为单位的,如果设计图是以dp单位标注的,直接用就行了,但是大部分是已px标注的,给一个公式,大家自己换算一下就可以了。
公式:dp = px / (dpi / 160)
不会换算的就获取自己测试app用的手机的dp
附上一个链接,可以直接用链接上面获取设备的dp就可以了。
3.在布局中的控件使用dp作为单位就可以了
附上gitHub中文地址:
https://github.com/JessYanCoding/AndroidAutoSize/blob/master/README-zh.md
原理
对于详细的原理说明建议大家去这篇文章看看,讲的挺详细的
点这里
补充
1.在这里我推荐一个查看设计图软件尺寸的软件PxCook,下载下来就可以用,可以添加Android项目,将设计图导入进去之后,就可以查看设计图的各种尺寸,也不用再进行各种尺寸转换了。
2.我之前在项目中使用此框架的时候,遇到过屏幕适配失灵的情况,后来查询资料发现,只要在失效的Activity重写getResources()就可以,代码如下:
@Override
public Resources getResources() {
//需要升级到 v1.1.2 及以上版本才能使用 AutoSizeCompat
AutoSizeCompat.autoConvertDensityOfGlobal((super.getResources()));//如果没有自定义需求用这个方法
//AutoSizeCompat.autoConvertDensity((super.getResources(), 667, false);//如果有自定义需求就用这个方法
return super.getResources();
}
有时候我重写了getResources()方法之后,布局适配还会失效,这个时候我们可以这样写
@Override
public Resources getResources() {
//需要升级到 v1.1.2 及以上版本才能使用 AutoSizeCompat
//AutoSizeCompat.autoConvertDensityOfGlobal((super.getResources()));//如果没有自定义需求用这个方法
//下面667写自己设计图中的以dp为单位的大小
AutoSizeCompat.autoConvertDensity((super.getResources(), 667, false);//如果有自定义需求就用这个方法
return super.getResources();
}
如果这样还不行,重写 父布局 的 generateLayoutParams(AttributeSet),并在方法中设置正确的 DisplayMetrics#density
@Override
public LayoutParams generateLayoutParams(AttributeSet attrs) {
AutoSizeCompat.autoConvertDensityOfGlobal((getResources());//如果没有自定义需求用这个方法
AutoSizeCompat.autoConvertDensity((getResources(), 667, false);//如果有自定义需求就用这个方法
return super.generateLayoutParams(attrs);
}
如果在失效就去gitHub上看看有没有其它解决方案