Android屏幕适配(7) — 头条屏幕适配终极版

2022-07-15  本文已影响0人  奔跑的佩恩

前言

在之前的文章中,我们讲到了Android屏幕适配的一些知识,大家感兴趣的话可参考
Android屏幕适配(1) — 概念解释
Android屏幕适配(2) — drawable与mipmap
Android屏幕适配(3) — 资源文件夹命名与匹配规则
Android屏幕适配(4) — 宽高限定符
Android屏幕适配(5) — 最小宽度smallWidth适配
Android屏幕适配(6) — 今日头条屏幕适配
这节我们讲讲今日头条屏幕适配终极方案。
今天设计知识有:

  1. AndroidAutoSize库简介
  2. AndroidAutoSize引用
  3. 封装AndroidAutoSize功能类介绍
  4. 封装AndroidAutoSize功能的使用
    4.1 MainAfast.xml 中配置设计图屏幕适配尺寸
    4.2 Application初始化
    4.3 Activity屏幕适配
    4.4 Activity屏幕取消适配
    4.5 Fragment屏幕适配
    4.6 Fragment屏幕取消适配
    4.7 屏幕适配注意事项
  5. 项目结构图及效果图
  6. 封装AndroidAutoSize功能相关源码

一. AndroidAutoSize 库简介

AndroidAutoSize库是基于头条屏幕适配原理的优化实现的,其代码库的使用地址如下:
AndroidAutoSize
在gitHub上使用的人挺多。今天讲讲此屏幕适配库结合项目的集成使用。

二. AndroidAutoSize 引用

若为gradle7.0以下项目,在自己的项目rootbuild.gradle中添加如下引用:

allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
    }
}

若为gradle7.0以上项目,在自己的项目rootsettings.gradle中添加如下引用:

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
    }
}

以上为在项目root对应的xxx.gradle中做的配置,接着在自己app_modulebuild.gradle中添加库引用:

implementation 'me.jessyan:autosize:1.2.1'

三. 封装 AndroidAutoSize 功能的使用

假设在我们自己的项目中有一个Activity的基类BaseActivity,然后有一个Fragment的基类BaseFragment
在这里我对该库做了些处理,便于项目集成使用。整合成以几个类:

四. 封装AndroidAutoSize功能的使用

ok,框架的引用及几个封装帮助类的功能都已经讲解完了。接下来讲讲在项目中如何使用。

4.1 MainAfast.xml 中配置设计图屏幕适配尺寸

假设UI出图的设计标准对标屏幕尺寸为: 宽x高= 1080(px) x 1920(px)
则利用公式
dp=ScreenUtil.px2dp(px, context)
算出 宽x高 对应dp值为:360x640
接着在你项目的MainAfast.xml中添加设计屏幕尺寸信息,类似如下:

<manifest>
    <application>            
        <meta-data
            android:name="design_width_in_dp"
            android:value="360"/>  //以你设计图宽度dp值为准
        <meta-data
            android:name="design_height_in_dp"
            android:value="640"/>  //以你设计图高度dp值为准          
     </application>           
</manifest>

需要注意的是,design_width_in_dpdesign_height_in_dp填的是你设计图上宽高px转成dp后的尺寸

4.2 Application初始化

在你项目的Application中做初始化配置,如下:

public class AppContext extends Application {

    private static AppContext instance;

    public static synchronized AppContext getInstance() {
        return instance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;

        //屏幕适配AutoSize框架初始化
        new AutoAdapterHelper().init(this) //防止方法数65535
                .initForFragment(true); //适配fragment

    }



}
4.3 Activity屏幕适配

SuperAutoSizeActivity继承你项目中的BaseActivity,然后你新建的Activity(如TestActivity)实现屏幕适配,可以像下面这样:

//实现屏幕适配
public class TestActivity extends ApplyAutoActivity{

}

若要自定义适配标准和尺寸,可以像下面这样:

//实现屏幕适配
public class TestActivity extends ApplyAutoActivity{

    @Override
    public boolean isBaseOnWidth() {
        //默认ture,表示以最小宽度适配,false表示以最小高度适配
        return false;
    }

    @Override
    public float getSizeInDp() {
        //表示此界面以最小高度 667dp (如果设计图是px的话要转换成dp)适配屏幕
        return 667;
    }
}
4.4 Activity屏幕取消适配

CancelAutoActivity继承你项目中的BaseActivity,然后你新建的Activity(如TestActivity)取消屏幕适配,可以像下面这样:

//取消屏幕适配
public class TestActivity extends CancelAutoActivity{

}
4.5 Fragment屏幕适配

ApplyAutoFragment继承你项目中的BaseFragment,然后你新建的Fragment(如TestFragment)实现屏幕适配,可以像下面这样:

//实现屏幕适配
public class TestFragment extends ApplyAutoFragment{

}

若要自定义适配标准和尺寸,可以像下面这样:

//实现屏幕适配
public class TestFragment extends ApplyAutoFragment{

    @Override
    public boolean isBaseOnWidth() {
        //默认ture,表示以最小宽度适配,false表示以最小高度适配
        return false;
    }

    @Override
    public float getSizeInDp() {
        //表示此界面以最小高度 667dp (如果设计图是px的话要转换成dp)适配屏幕
        return 667;
    }
}
4.6 Fragment屏幕取消适配

CancelAutoFragment继承你项目中的BaseFragment,然后你新建的Fragment(如TestFragment)取消屏幕适配,可以像下面这样:

//取消屏幕适配
public class TestFragment extends CancelAutoFragment{

}
4.7 屏幕适配注意事项

五. 项目结构图及效果图

项目结构图.png
效果图.png

六. 封装AndroidAutoSize功能相关源码

AutoAdapterHelper源码如下:

上一篇下一篇

猜你喜欢

热点阅读