Android 屏幕自适应
介绍 autosize
参考地址:https://www.jianshu.com/p/55e0fca23b4f
autosize 是一个 Android 开源库,旨在简化适配不同屏幕尺寸和分辨率的工作。它主要解决了在不同设备上,应用界面可能因屏幕尺寸、分辨率和像素密度不同而出现的布局问题。
自动适配:
- 自动根据屏幕尺寸和分辨率调整布局大小和字体大小,减少了手动调整的工作量。
支持多种布局:
- 支持
TextView、EditText、Button等控件的自动缩放。
灵活的配置:
- 可以通过设置
design_width_in_dp和design_height_in_dp来指定设计图的宽度和高度,从而根据这些设计尺寸进行缩放。
适配多种设备:
- 通过自动计算适当的缩放比例来适配不同尺寸的设备,包括手机、平板等。
使用方法
添加依赖
dependencyResolutionManagement {
repositories {
maven { url "https://jitpack.io" }//maven仓库
}
}
dependencies {
implementation 'com.github.JessYanCoding:AndroidAutoSize:v1.2.1'
}
// 不要使用这个依赖
// implementation 'me.jessyan:autosize:1.2.1'
// Jcenter ( ⚠️ DEPRECATION WARNING: the JCenter repository will keep serving packages until February 1st, 2022):
// Jcenter(.分发警告:JCenter存储库将在2022年2月1日之前继续提供包)
配置
<!-- 设计图宽度 -->
<meta-data
android:name="design_width_in_dp"
android:value="360"/>
<!-- 设计图高度 -->
<meta-data
android:name="design_height_in_dp"
android:value="640"/>
总结
AutoSize使用比较简单使用,容易上手。
如果没有特殊需求,上面就已经实现了自动适配了
进阶
自定义适配
在activity、fragment中实现CustomAdapt
public class CustomHorizontalAdaptActivity extends AppCompatActivity implements CustomAdapt {
@Override
public boolean isBaseOnWidth() {
// true 按照宽度适配,false 按照高度适配
return true;
}
@Override
public float getSizeInDp() {
// 使用自定义设计图尺寸dpi
return 667;
// return 0;为使用全局meta-data的dpi
}
}
//对fragment进行适配前得配置
AutoSizeConfig.getInstance().setCustomFragment(true);//开启框架fragment的支持
public class CustomVerticalAdaptFragment extends Fragment implements CustomAdapt {
@Override
public boolean isBaseOnWidth() {
// true 按照宽度适配,false 按照高度适配
return false;
}
@Override
public float getSizeInDp() {
// 使用自定义设计图尺寸dpi
return 667;
// return 0;为使用全局meta-data的dpi
}
取消适配
在activity或者fragment中继承CancelAdapt
public class CancelAdaptActivity extends AppCompatActivity implements CancelAdapt {
}
public class CancelAdaptFragment extends Fragment implements CancelAdapt {
}
对于一些特定的、不需要缩放的可以配置AutoSizeConfig来实现
/*
你可以选择pt,in,mm这三个冷门单元中的一个作为子单元,这个子单元用来避免修改DisplayMetrics#density带来的不利影响,使用这个子单元后,你可以在设计图上写像素大小,你不需要把它转换成dp
*/
AutoSizeConfig.getInstance()
.getUnitsManager()
.setSupportDP(false)
.setSupportSP(false)
.setSupportSubunits(Subunits.MM);
异常
@Override
public Resources getResources() {
/*
在任何情况下本来适配正常的布局突然出现适配失效,适配异常等问题,重写 Activity 的 getResources() 方法即可,如果是 Dialog、PopupWindow 等控件出现适配失效或适配异常,同样在每次 show() 之前调用 AutoSize#autoConvertDensity() 即可。
*/
//需要升级到 v1.1.2 及以上版本才能使用 AutoSizeCompat
AutoSizeCompat.autoConvertDensityOfGlobal(super.getResources());//如果没有自定义需求用这个方法
AutoSizeCompat.autoConvertDensity(super.getResources(),667, false);//如果有自定义需求就用这个方法
return super.getResources();
}
*看到有一个博主说的,但是我没有遇到过,标注一下*
参考:
https://www.jianshu.com/p/12ce5c0a6163
总结
AutoSize 使得适配不同屏幕尺寸和分辨率的工作变得简单,适合大多数应用场景。如果需要更复杂的适配逻辑,可以利用自定义适配和取消适配功能。
最重要的是简单,方便,见效快

浙公网安备 33010602011771号