美文网首页
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