Android屏幕适配AndroidAutoSize的使用「建议收藏」

Android屏幕适配AndroidAutoSize的使用「建议收藏」Android屏幕适配AndroidAutoSize的使用AndroidAutoSize的使用加入依赖配置AndroidManifest.xml主单位或者副单位主单位的配置副单位的配置主单位的使用副单位的使用插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入AndroidAutoSize的使

大家好,又见面了,我是你们的朋友全栈君。

AndroidAutoSize的使用

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

加入依赖

implementation ‘me.jessyan:autosize:1.2.1’

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

主单位的配置

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

副单位的配置

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

初始化

在Application中配置AndroidAutoSize

AutoSize.initCompatMultiProcess(this)
/** * 以下是 AndroidAutoSize 可以自定义的参数, [AutoSizeConfig] 的每个方法的注释都写的很详细 * 使用前请一定记得跳进源码,查看方法的注释, 下面的注释只是简单描述!!! */
AutoSizeConfig.getInstance().apply { 
   
    isCustomFragment = true
    onAdaptListener = 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(a
            String.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 打印日志, 则请设置为 false
    setLog(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">

    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal">

        <TextView android:layout_width="100dp" android:layout_height="100dp" android:background="@color/colorAccent" android:gravity="center" android:text="W100DP" android:textColor="#fff" android:textSize="20sp" />
        <TextView android:layout_width="160dp" android:layout_height="100dp" android:background="@color/black" android:gravity="center" android:text="W160DP" android:textColor="@color/white" android:textSize="20sp" />
        <TextView android:layout_width="100dp" android:layout_height="100dp" android:background="#0d0" android:gravity="center" android:text="W100DP" android:textColor="#fff" android:textSize="20sp" />
    </LinearLayout>

    <Button android:layout_width="360dp" android:layout_height="100dp" android:background="#fd0" android:onClick="goCustomAdaptActivity" android:text="Cum" android:textColor="#0d0" android:textSize="70sp" />
    <ImageView android:layout_width="match_parent" android:layout_height="220dp" android:background="@color/colorPrimary" />
    <ImageView android:layout_width="match_parent" android:layout_height="220dp" android:background="@color/colorAccent" />
</LinearLayout>

在1080*2160 DPI400显示效果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()=false

    override 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 = true
    supportSubunits = Subunits.MM
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141009.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 最大似然估计的分布函数_二项分布的最大似然估计值怎么求

    最大似然估计的分布函数_二项分布的最大似然估计值怎么求原因今天晚上,老师在看LDA数学八卦的时候,问我一个问题,如下图所示:这个多项式分布的参数,采用极大估计是怎么求的呢?当时想了想还真不知道,于是在网上找了资料,学习了一下,特此记录。公式推导很多情况下,假定一个变量XX有kk个状态,其中k&gt;2k&gt;2,每个状态假定的可能性为p1,p2,⋯,pkp_{1},p_{2},\cdots,p_{k},且∑ki=1pi=1\sum_{i=1}

    2022年10月12日
    3
  • 服务器硬盘整体ghost,ghost备份整个硬盘| 全盘镜像ghost步骤[通俗易懂]

    服务器硬盘整体ghost,ghost备份整个硬盘| 全盘镜像ghost步骤[通俗易懂]ghost备份整个硬盘|全盘镜像ghost步骤优点:全盘完全100%对拷,包括原有操作系统也可使用。新硬盘对拷结束后,可直接插上电脑使用。消耗时间最短。困难:对于第一次操作Ghost对拷的新人来说,需要严格对照图片步骤教程。一旦操作失误,可能导致原有母盘数据不可逆转丢失。步骤一:打开“ToDisk”对拷选项(1)首选打开Ghost工具,进入界面后,选择“Local”→“Disk”→“ToD…

    2025年9月23日
    4
  • ssm和c3p0连接池配置文件的详解

    ssm和c3p0连接池配置文件的详解spring.xml配置&lt;?xmlversion="1.0"encoding="UTF-8"?&gt;&lt;beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:co…

    2022年6月5日
    31
  • 用tcping检查网站开放的端口

    用tcping检查网站开放的端口neo之前分享过一款小巧玲珑工具软件:tcping,即在tcp层进行端口的ping。tcping可以用来检查和确认我们的网站有哪些端口是开放的,使用很顺手。比如neo这几天在研究如何关闭mysql的3306端口,就通过使用tcping工具来确认关闭端口是否成功。Linux下有有个netstat命令,总是对其输出看得云里雾里,虽然netstat-l的输出看不到3306端口,是tcping还能p…

    2022年6月23日
    63
  • 双机流水作业调度问题——Johnson算法「建议收藏」

    双机流水作业调度问题——Johnson算法「建议收藏」概述流水作业是并行处理技术领域的一项关键技术,它是以专业化为基础,将不同处理对象的同一施工工序交给专业处理部件执行,各处理部件在统一计划安排下,依次在各个作业面上完成指定的操作。流水作业调度问题是一个非常重要的问题,其直接关系到计算机处理器的工作效率。然而由于牵扯到数据相关、资源相关、控制相关等许多问题,最优流水作业调度问题处理起来非常复杂。已经证明,当机器数(或称工序数)大于等于3时,流水作业调度问题是一个NP-hard问题(e.g分布式任务调度)。粗糙地说,即该问题至少在目前基本上没有可能找到多项

    2025年5月24日
    2
  • Android清理设备内存具体完整演示样例(一)

    Android清理设备内存具体完整演示样例(一)

    2021年12月14日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号