Android屏幕适配AndroidAutoSize的使用
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的使用相关推荐
- Android 屏幕适配终结者
本文作者: 布兰柯基 本文链接: https://blankj.com/2018/12/18/android-adapt-screen-killer/ 文末有彩蛋 背景 之前基于头条的适配方案写了篇文 ...
- android 屏幕适配框架,Android屏幕适配
为什么要进行Android屏幕适配 由于Android系统的开放性,任何用户.开发者.OEM厂商.运营商都可以对Android进行定制,于是导致: 1.Android系统碎片化:小米定制的MIUI.魅 ...
- 鸿洋android屏幕适配四部曲-传送门
鸿洋android屏幕适配四部曲-传送门 两分钟理解Android中PX.DP.SP的区别 https://blog.csdn.net/donkor_/article/details/77680042 ...
- Android 屏幕适配
一.适配方式之dp 名词解释 分辨率:480*800,1280*720.表示物理屏幕区域内像素点的总和.(切记:跟屏幕适配没有任何关系) 因为我们既可以把1280*720 的分辨率做到4.0 的手机上 ...
- android屏幕适配详解
android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...
- Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。
Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...
- Android屏幕适配全攻略(最权威的官方适配指导) (转)
招聘信息: Cocos2d-X 前端主程 [新浪微博]手机客户端iOS研发工程师 20k-40k iOS 开发工程师 iOS高级开发工程师(中国排名第一的企业级移动互联网云计算公司 和创科技 红圈营销 ...
- android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度
为什么要适配,适配的好处等等这里就不说了,直接说我们要怎么适配,请看下面的内容. 1.重要概念 px:pixel,像素Android原生API,UI设计计量单位,如获取屏幕宽高. 屏幕分辨率:指在纵向 ...
- 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)
来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ...
最新文章
- Recommenders with TensorRT
- 点云学习在自动驾驶中的研究概述
- HBase概念学习(八)开发一个类twitter系统之表设计
- 哎!马上要涉水了,装修的水!
- Selector-背景选择器
- CEO 赠书 |《跨越鸿沟》如何将梦想变为现实?
- linux内核杂记(18)-内核链表结构(2)
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- 学生成绩管理系统实验报告_学习60天python成果,Python变成学生成绩管理系统
- cc1 transform链
- 几种常见模式识别算法整理和总结
- 二进制原码一位乘法运算
- 计算机硬盘格式分类,fat32是什么?
- Could not find conduit initiator for address
- 我从实习到现在的经历,幸运女神总会来到!
- 阿里技术专家花3年写的《MySQL笔记》解决了70%数据库面试难题,网友:非常棒!
- HDU5142 NPY and arithmetic progression BestCoder Round #23 1002
- 快速通读教材《现代软件工程——构建之法》后的随笔
- Ambari-2.7.5.0 + HDP-3.1.5.0网盘地址
- 从零开始学Redis之自在地境
热门文章
- 未来计算机有哪三种,未来有可能引起计算机技术革命有哪几种呢
- 【原创】利用xbrowser进行远程连接
- 会议记录-格式与范文
- 在Cadence16.6中导入Logo
- 李子的密码加密!!!!(随机数版)
- 数据交换系统-软件评测知识(分享篇)
- 高级前端架构师必备技能(marksheng)
- Netbackup常用命令--bprestore
- 长尾词挖掘,如何挖掘出精准的长尾词
- Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/velocity/context/Context 	at c