Android 屏幕自适应

介绍 autosize

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

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

自动适配

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

支持多种布局

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

灵活的配置

  • 可以通过设置 design_width_in_dpdesign_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 使得适配不同屏幕尺寸和分辨率的工作变得简单,适合大多数应用场景。如果需要更复杂的适配逻辑,可以利用自定义适配和取消适配功能。

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

代码地址

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

posted @ 2024-07-26 09:59  疾风不问归途  阅读(579)  评论(0)    收藏  举报