Android屏幕适配AndroidAutoSize的使用

  • AndroidAutoSize的使用
    • 加入依赖
    • 配置AndroidManifest.xml主单位或者副单位
    • 主单位的配置
    • 副单位的配置
    • 初始化
    • 主单位的使用
    • 副单位的使用

AndroidAutoSize的使用

记录一下Android屏幕适配框架的使用

加入依赖

implementation 'me.jessyan:autosize:1.2.1’

配置AndroidManifest.xml主单位或者副单位

主单位的配置

<application>
.......
<meta-dataandroid:name="design_width_in_dp"android:value="360"/><meta-dataandroid:name="design_height_in_dp"android:value="640"/>
......
</application>

副单位的配置

<application>
.......<meta-dataandroid:name="design_width_in_dp"android:value="1080"/><meta-dataandroid:name="design_height_in_dp"android:value="1920"/>
......
</application>

初始化

在Application中配置AndroidAutoSize

AutoSize.initCompatMultiProcess(this)
/*** 以下是 AndroidAutoSize 可以自定义的参数, [AutoSizeConfig] 的每个方法的注释都写的很详细* 使用前请一定记得跳进源码,查看方法的注释, 下面的注释只是简单描述!!!*/
AutoSizeConfig.getInstance().apply {isCustomFragment = trueonAdaptListener = object : onAdaptListener {override fun onAdaptBefore(target: Any, activity: Activity) {//使用以下代码, 可以解决横竖屏切换时的屏幕适配问题//使用以下代码, 可支持 Android 的分屏或缩放模式, 但前提是在分屏或缩放模式下当用户改变您 App 的窗口大小时//系统会重绘当前的页面, 经测试在某些机型, 某些情况下系统不会主动重绘当前页面, 所以这时您需要自行重绘当前页面//ScreenUtils.getScreenSize(activity) 的参数一定要不要传 Application!!!//                        AutoSizeConfig.getInstance().setScreenWidth(ScreenUtils.getScreenSize(ac//                        AutoSizeConfig.getInstance().setScreenHeight(ScreenUtils.getScreenSize(aString.format(Locale.ENGLISH, "%s onAdaptBefore!", target.javaClass.name).loge("AutoSizeLog")}override fun onAdaptAfter(target: Any, activity: Activity) {String.format(Locale.ENGLISH, "%s onAdaptAfter!", target.javaClass.name).loge("AutoSizeLog")}}//是否使用设备的实际尺寸做适配, 默认为 false, 如果设置为 false, 在以屏幕高度为基准进行适配时//AutoSize 会将屏幕总高度减去状态栏高度来做适配//设置为 true 则使用设备的实际屏幕高度, 不会减去状态栏高度//在全面屏或刘海屏幕设备中, 获取到的屏幕高度可能不包含状态栏高度, 所以在全面屏设备中不需要减去状态栏高度,所以可以 setUseDeviceSize(true)isUseDeviceSize = false//是否打印 AutoSize 的内部日志, 默认为 true, 如果您不想 AutoSize 打印日志, 则请设置为 falsesetLog(true)//是否全局按照宽度进行等比例适配, 默认为 true, 如果设置为 false, AutoSize 会全局按照高度进行适配isBaseOnWidth = true//设置屏幕适配逻辑策略类, 一般不用设置, 使用框架默认的就好//setAutoAdaptStrategy { target, activity ->//}
}

主单位的使用

AndroidAutoSize默认适配方案是按照宽来适配的
看下activity_layout的布局
顶部三个TextView宽度分别100dp+160dp+100dp=360dp
纵向一共分为了四个区域100dp+100dp+220dp+220dp=640dp

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="100dp"android:layout_height="100dp"android:background="@color/colorAccent"android:gravity="center"android:text="W100DP"android:textColor="#fff"android:textSize="20sp" /><TextViewandroid:layout_width="160dp"android:layout_height="100dp"android:background="@color/black"android:gravity="center"android:text="W160DP"android:textColor="@color/white"android:textSize="20sp" /><TextViewandroid:layout_width="100dp"android:layout_height="100dp"android:background="#0d0"android:gravity="center"android:text="W100DP"android:textColor="#fff"android:textSize="20sp" /></LinearLayout><Buttonandroid:layout_width="360dp"android:layout_height="100dp"android:background="#fd0"android:onClick="goCustomAdaptActivity"android:text="Cum"android:textColor="#0d0"android:textSize="70sp" /><ImageViewandroid:layout_width="match_parent"android:layout_height="220dp"android:background="@color/colorPrimary" /><ImageViewandroid:layout_width="match_parent"android:layout_height="220dp"android:background="@color/colorAccent" />
</LinearLayout>

在1080*2160 DPI400显示效果
在Pixel_XL 1440*2560 560DPI显示效果

可以看到两个宽度的显示效果是一样的
下面我们看下以高度为适配基准 AndroidAutoSize默认是以宽度为基准适配的 你可以选择初始化配置的时候全局配置宽度或者高度适配

AutoSizeConfig.getInstance().apply {.......//是否全局按照宽度进行等比例适配, 默认为 true, 如果设置为 false, AutoSize 会全局按照高度进行适配isBaseOnWidth = false.......}

如果你想让某一个Activity以高度适配为基准可以实现CustomAdapt接口

class LoginActivity : AppCompatActivity(), CustomAdapt {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_login)}override fun isBaseOnWidth()=falseoverride fun getSizeInDp()=0f
}

我们来看下以高度为基准的显示效果
在1080*2160 DPI400显示效果

在Pixel_XL 1440*2560 560DPI显示效果


可以看到底部的两块区域刚好填充完屏幕

副单位的使用

初始化

//AndroidAutoSize 默认开启对 dp 的支持, 调用 UnitsManager.setSupportDP(false); 可以关闭对 dp 的支持
//主单位 dp 和 副单位可以同时开启的原因是, 对于旧项目中已经使用了 dp 进行布局的页面的兼容
//让开发者的旧项目可以渐进式的从 dp 切换到副单位, 即新页面用副单位进行布局, 然后抽时间逐渐的将旧页面的布局单位从 dp 改为副单位
//最后将 dp 全部改为副单位后, 再使用 UnitsManager.setSupportDP(false); 将 dp 的支持关闭, 彻底隔离修改 density 所造成的不良影响
//如果项目完全使用副单位, 则可以直接以像素为单位填写 AndroidManifest 中需要填写的设计图尺寸, 不需再把像素转化为 dp
//AndroidAutoSize 默认开启对 dp 的支持, 调用 UnitsManager.setSupportDP(false); 可以关闭对 dp 的支持
//主单位 dp 和 副单位可以同时开启的原因是, 对于旧项目中已经使用了 dp 进行布局的页面的兼容
//让开发者的旧项目可以渐进式的从 dp 切换到副单位, 即新页面用副单位进行布局, 然后抽时间逐渐的将旧页面的布局单位从 dp 改为副单位
//最后将 dp 全部改为副单位后, 再使用 UnitsManager.setSupportDP(false); 将 dp 的支持关闭, 彻底隔离修改 density 所造成的不良影响
//如果项目完全使用副单位, 则可以直接以像素为单位填写 AndroidManifest 中需要填写的设计图尺寸, 不需再把像素转化为 dp
AutoSizeConfig.getInstance().unitsManager.apply {isSupportDP = truesupportSubunits = Subunits.MM
}

然后在布局文件中使用mm pt in单位即可 宽高适配基准和主单位一致

Android屏幕适配AndroidAutoSize的使用相关推荐

  1. Android 屏幕适配终结者

    本文作者: 布兰柯基 本文链接: https://blankj.com/2018/12/18/android-adapt-screen-killer/ 文末有彩蛋 背景 之前基于头条的适配方案写了篇文 ...

  2. android 屏幕适配框架,Android屏幕适配

    为什么要进行Android屏幕适配 由于Android系统的开放性,任何用户.开发者.OEM厂商.运营商都可以对Android进行定制,于是导致: 1.Android系统碎片化:小米定制的MIUI.魅 ...

  3. 鸿洋android屏幕适配四部曲-传送门

    鸿洋android屏幕适配四部曲-传送门 两分钟理解Android中PX.DP.SP的区别 https://blog.csdn.net/donkor_/article/details/77680042 ...

  4. Android 屏幕适配

    一.适配方式之dp 名词解释 分辨率:480*800,1280*720.表示物理屏幕区域内像素点的总和.(切记:跟屏幕适配没有任何关系) 因为我们既可以把1280*720 的分辨率做到4.0 的手机上 ...

  5. android屏幕适配详解

    android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...

  6. Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。

    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...

  7. Android屏幕适配全攻略(最权威的官方适配指导) (转)

    招聘信息: Cocos2d-X 前端主程 [新浪微博]手机客户端iOS研发工程师 20k-40k iOS 开发工程师 iOS高级开发工程师(中国排名第一的企业级移动互联网云计算公司 和创科技 红圈营销 ...

  8. android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度

    为什么要适配,适配的好处等等这里就不说了,直接说我们要怎么适配,请看下面的内容. 1.重要概念 px:pixel,像素Android原生API,UI设计计量单位,如获取屏幕宽高. 屏幕分辨率:指在纵向 ...

  9. 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)

    来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ...

最新文章

  1. Recommenders with TensorRT
  2. 点云学习在自动驾驶中的研究概述
  3. HBase概念学习(八)开发一个类twitter系统之表设计
  4. 哎!马上要涉水了,装修的水!
  5. Selector-背景选择器
  6. CEO 赠书 |《跨越鸿沟》如何将梦想变为现实?
  7. linux内核杂记(18)-内核链表结构(2)
  8. 【算法学习笔记】07.数据结构基础 链表 初步练习
  9. 学生成绩管理系统实验报告_学习60天python成果,Python变成学生成绩管理系统
  10. cc1 transform链
  11. 几种常见模式识别算法整理和总结
  12. 二进制原码一位乘法运算
  13. 计算机硬盘格式分类,fat32是什么?
  14. Could not find conduit initiator for address
  15. 我从实习到现在的经历,幸运女神总会来到!
  16. 阿里技术专家花3年写的《MySQL笔记》解决了70%数据库面试难题,网友:非常棒!
  17. HDU5142 NPY and arithmetic progression BestCoder Round #23 1002
  18. 快速通读教材《现代软件工程——构建之法》后的随笔
  19. Ambari-2.7.5.0 + HDP-3.1.5.0网盘地址
  20. 从零开始学Redis之自在地境

热门文章

  1. 未来计算机有哪三种,未来有可能引起计算机技术革命有哪几种呢
  2. 【原创】利用xbrowser进行远程连接
  3. 会议记录-格式与范文
  4. 在Cadence16.6中导入Logo
  5. 李子的密码加密!!!!(随机数版)
  6. 数据交换系统-软件评测知识(分享篇)
  7. 高级前端架构师必备技能(marksheng)
  8. Netbackup常用命令--bprestore
  9. 长尾词挖掘,如何挖掘出精准的长尾词
  10. Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/velocity/context/Context at c