Android 屏幕自适应

1|0介绍 autosize

参考地址:https://www.jianshu.com/p/55e0fca23b4f

autosize 是一个 Android 开源库,旨在简化适配不同屏幕尺寸和分辨率的工作。它主要解决了在不同设备上,应用界面可能因屏幕尺寸、分辨率和像素密度不同而出现的布局问题。

1|1自动适配:

  • 自动根据屏幕尺寸和分辨率调整布局大小和字体大小,减少了手动调整的工作量。

1|2支持多种布局:

  • 支持 TextViewEditTextButton 等控件的自动缩放。

1|3灵活的配置:

  • 可以通过设置 design_width_in_dpdesign_height_in_dp 来指定设计图的宽度和高度,从而根据这些设计尺寸进行缩放。

1|4适配多种设备:

  • 通过自动计算适当的缩放比例来适配不同尺寸的设备,包括手机、平板等。

2|0使用方法

2|1添加依赖

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日之前继续提供包)

2|2配置

<!-- 设计图宽度 -->
<meta-data
android:name="design_width_in_dp"
android:value="360"/>
<!-- 设计图高度 -->
<meta-data
android:name="design_height_in_dp"
android:value="640"/>

2|3总结

AutoSize使用比较简单使用,容易上手。

如果没有特殊需求,上面就已经实现了自动适配了

3|0进阶

3|1自定义适配

在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
}

3|2取消适配

在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);

3|3异常

@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

3|4总结

AutoSize 使得适配不同屏幕尺寸和分辨率的工作变得简单,适合大多数应用场景。如果需要更复杂的适配逻辑,可以利用自定义适配和取消适配功能。

最重要的是简单,方便,见效快

4|0代码地址

https://gitee.com/lxj_dear/android-autosize


__EOF__

本文作者疾风不问归途
本文链接https://www.cnblogs.com/20lxj666/p/18324738.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   疾风不问归途  阅读(287)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示