Skip to content

Repository files navigation

alt text

android 屏幕适配的两种终结方式

  • Smallest Width 适配
  • DisplayMetrics.densityDpi 属性修改

完美兼容 AndroidX 和 Android 库 ^_^ ,欢迎使用~~

原理讲解,必看

屏幕原理

适配原理


第一种适配方式 - Smallest Width 方式

插件版本: Download

使用方法

在项目的根 build.gradle 中添加

buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath'com.android.tools.build:gradle:3.5.0-alpha13'// 在此处添加classpath'vip.ruoyun.plugin:screen-plugin:1.0.1'
}
}
allprojects {
repositories {
google()
jcenter()
}
}

在要使用插件的的子项目的 build.gradle 中添加

applyplugin: 'vip.ruoyun.screen'screen {
smallestWidths320, 360, 384, 392, 400, 410, 411, 432, 480//生成的目标屏幕宽度的适配文件designSmallestWidth375//苹果设计稿750 × 1334 屏幕宽度为 375decimalFormat"#.#"//设置保留的小数 ( #.## 保留2位) ( #.# 保留1位)logfalse//是否打印日志autofalse//是否每次 build 项目的时候自动生成 values-sw[]dp 文件
}

如果 auto 设置为 true ,则每次 build 项目的时候自动生成 values-sw[]dp 文件

如果 auto 设置为 false,则可以通过命令行,来生成文件.

./gradlew dimensCovert

也可以在 gradle命令的 窗口中 点击 dimensCovert 的 task.

自动生成的sw 文件

生成规则:只会生成 dp 后缀的属性值,根据 values 目录下的 dimens.xml,生成具体的文件。 values 目录下的 dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimenname="x20">20dp</dimen>
<dimenname="x30">20sp</dimen>
</resources>

生成的目标文件,values-sw320dp 目录下的 dimens.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<dimenname="x20">17.1dp</dimen>
</resources>

第二种适配方式 - DisplayMetrics.densityDpi 属性修改

插件版本: Download

在项目的根 build.gradle 中添加 jcenter 仓库

buildscript {
repositories {
google()
jcenter()
}
...
}
allprojects {
repositories {
google()
jcenter()
}
}

然后在子项目中的 build.gradle 文件中添加

dependencies {
implementation'vip.ruoyun.helper:screen-helper:1.0.2'
}

使用,在每个Activity 重写getResources()方法。

publicclassMainActivityextendsAppCompatActivity {
@OverridepublicResourcesgetResources() {
returnScreenHelper.applyAdapt(super.getResources(), 450f, ScreenHelper.WIDTH_DP);
}
}

如果是悬浮窗适配,因为 inflate 用到的 context 是 application 级别的,所以需要在自定义的 Application 中重写 getResource。

publicclassAppextendsApplication {
@OverridepublicResourcesgetResources() {
returnScreenHelper.applyAdapt(super.getResources(), 450f, ScreenHelper.WIDTH_DP);
}
}

类型

  • ScreenHelper.WIDTH_DP 以 dp 来适配,在 xml 中使用 dp 单位
  • ScreenHelper.WIDTH_PT 以 pt 来适配,在 xml 中使用 pt 单位
  • ScreenHelper.HEIGHT_PT 以 pt 来适配,在 xml 中使用 pt 单位

版本变化

  • 1.0.2 :优化传递 ScreenMode 的参数传递,去除不必要的 log
  • 1.0.1 :优化 Resources.getSystem() 变量获取,由于此方法是 synchronized ,如果频繁调用会影响性能
  • 1.0.0 :正式发版

About

android 屏幕适配的终极方案: SmallestWidth适配修改和 DisplayMetrics.densityDpi属性, 完美兼容 AndroidX 和 Android 库 ^_^ ,欢迎使用~~

Topics

Resources

Stars

41 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages