RatioLayout一个屏幕适配三方库源码分析

本文详细分析了RatioLayout的工作原理,它通过ratio属性实现UI按比例设置,确保在不同屏幕尺寸下保持一致显示效果。在源码中,关键在于自定义布局的onMeasure()方法,手动测量并计算出合适的宽高比,从而提供精确的测量规格。通过一个RatioFrameLayout的实例,展示了如何实现这一功能。最后,提供了RatioLayout的第三方库GitHub链接供参考。
摘要由CSDN通过智能技术生成
RatioLayout一个屏幕适配三方库源码分析

我的github博客详解


使用dp进行UI设置:

可以看出,在不同分辨率或者密度的屏幕,相同dp值设置的效果是不同的。


使用ratio进行UI设置(按比例设置):

可以看出,在不同分辨率或者密度的屏幕,ratio按比例设置的效果是比较出色的。


简单分析RatioLayout:

1,初始化一些参数,设置数据,为了在xml中设置属性到自定义布局中使用
2,在系统测量之前手动测量一次,获取到参考值(屏幕最大宽度或者最大高度),根据参考值与比例ratio计算出高度或者宽度
3,生成测量规格,将新的测量规格传递给系统onMeasure()方法中,进行测量。


RatioLayout源码分析:

RatioLayoutDelegate 核心类,用于计算出ratio比例的实际宽高的测量规格



        public final class RatioLayoutDelegate<TARGET extends View & RatioMeasureDelegate> {
   

            public static <TARGET extends View & RatioMeasureDelegate> RatioLayoutDelegate obtain(TARGET target, AttributeSet attrs) {
                return obtain(target,attrs,0);
            }

            public static <TARGET extends View & RatioMeasureDelegate> RatioLayoutDelegate obtain(TARGET target, AttributeSet attrs, int defStyleAttr) {
                return obtain(target,attrs,0,0);
            }

            @SuppressWarnings("unchecked")
            public static <TARGET extends View & RatioMeasureDelegate> RatioLayoutDelegate obtain(TARGET target, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
                return new RatioLayoutDelegate(target,attrs,defStyleAttr,defStyleRes);
            }

            private 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值