前言
在之前的文章中,我们讲到了Android
屏幕适配的一些知识,大家感兴趣的话可参考
Android屏幕适配(1) — 概念解释
Android屏幕适配(2) — drawable与mipmap
Android屏幕适配(3) — 资源文件夹命名与匹配规则
Android屏幕适配(4) — 宽高限定符
Android屏幕适配(5) — 最小宽度smallWidth适配
Android屏幕适配(6) — 今日头条屏幕适配
这节我们讲讲今日头条屏幕适配终极方案。
今天设计知识有:
-
AndroidAutoSize
库简介 -
AndroidAutoSize
引用 - 封装
AndroidAutoSize
功能类介绍 - 封装
AndroidAutoSize
功能的使用
4.1MainAfast.xml
中配置设计图屏幕适配尺寸
4.2Application
初始化
4.3Activity
屏幕适配
4.4Activity
屏幕取消适配
4.5Fragment
屏幕适配
4.6Fragment
屏幕取消适配
4.7 屏幕适配注意事项 - 项目结构图及效果图
- 封装
AndroidAutoSize
功能相关源码
一. AndroidAutoSize 库简介
AndroidAutoSize
库是基于头条屏幕适配
原理的优化实现的,其代码库的使用地址如下:
AndroidAutoSize
在gitHub上使用的人挺多。今天讲讲此屏幕适配库结合项目的集成使用。
二. AndroidAutoSize 引用
若为gradle7.0以下
项目,在自己的项目root
的build.gradle
中添加如下引用:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
}
}
若为gradle7.0以上
项目,在自己的项目root
的settings.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_module
的build.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)
则利用公式
算出 宽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_dp
和design_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 屏幕适配注意事项
-
SuperAutoSizeActivity
和CancelAutoActivity
要继承我们项目自己的Activity
基类BaseActivity
。 -
ApplyAutoFragment
和CancelAutoFragment
要继承我们项目自己的Fragment
基类BaseFragment
。 - 在
MainAfast.xml
中设计宽高要填设计图px转化成dp的值,在自定义Activity/Fragment
中重设的SizeInDp
是需求给的是px值的话要转成dp值,
在界面对应的布局xml
文件中,ui
给出的是px值的话也要转成dp值。
五. 项目结构图及效果图
项目结构图.png效果图.png
六. 封装AndroidAutoSize功能相关源码
AutoAdapterHelper
源码如下:
网友评论