美文网首页
Android屏幕适配(7) — 头条屏幕适配终极版

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

作者: 奔跑的佩恩 | 来源:发表于2022-07-15 16:47 被阅读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
    在这里我对该库做了些处理,便于项目集成使用。整合成以几个类:

    • AutoAdapterHelper: 屏幕适配帮助类
    • SuperAutoSizeActivity:此类继承我们自己的BaseActivity,主要处理屏幕适配中出现不生效问题
    • ApplyAutoActivity: 此类继承SuperAutoSizeActivity,我们自己创建的Activity需要采用此适配屏幕框架的界面统一继承ApplyAutoActivity
    • ApplyAutoFragment: 此类继承我们项目的Fragment基类BaseFragment,当我们自建的Fragment要做屏幕适配,需要继承此类。
    • CancelAutoActivity: 此类继承我们项目的Activity基类BaseActivity,当我们自建的Activity取消屏幕适配时,需要继承此类。
    • CancelAutoFragment: 此类继承我们项目的Fragment基类BaseFragment,当我们自建的Fragment取消屏幕适配时,需要继承此类。

    四. 封装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 屏幕适配注意事项
    • SuperAutoSizeActivityCancelAutoActivity 要继承我们项目自己的 Activity 基类 BaseActivity
    • ApplyAutoFragmentCancelAutoFragment 要继承我们项目自己的 Fragment 基类 BaseFragment
    • MainAfast.xml中设计宽高要填设计图px转化成dp的值,在自定义Activity/Fragment中重设的SizeInDp是需求给的是px值的话要转成dp值,
      在界面对应的布局xml文件中,ui给出的是px值的话也要转成dp值。

    五. 项目结构图及效果图

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

    六. 封装AndroidAutoSize功能相关源码

    AutoAdapterHelper源码如下:

    相关文章

      网友评论

          本文标题:Android屏幕适配(7) — 头条屏幕适配终极版

          本文链接:https://www.haomeiwen.com/subject/ntdfirtx.html