前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >鸿洋AutoLayout代码分析(六):AutoAttr子类补充

鸿洋AutoLayout代码分析(六):AutoAttr子类补充

作者头像
dodo_lihao
发布2018-09-12 10:58:40
2070
发布2018-09-12 10:58:40
举报
文章被收录于专栏:懒人开发懒人开发

回顾

上一张,简单说明了 AutoAttr类的方法, 以及子类的实现,以及子类实现分类和理解 这里再简单补充一下


回顾3个抽象方法

上一篇说明了下, 子类必须实现的3个抽象方法 int attrVal(), boolean defaultBaseWidth(),void execute(View view, int val) 大体回顾一下 int attrVal() : 返回对应的Attrs中对应的类的 int值,也就是 有一位为1的二进制数值,之后会和 xml文件中配置的数字去对比位上的是否有相同的1

boolean defaultBaseWidth(): 是否是以宽为主,在 AutoAttr的apply(View view)中,会用到这个判断,如果不是对应的设置的值,是按比例计算宽的大小,还是按比例计算高的大小

void execute(View view, int val): 最后按比例计算完值以后, 所需要做的事情


MarginAttr和PaddingAttr的特殊

因为我们配置对应属性的时候,例如MarginLeft等, 都只有一个值, 这时候,会去判断对应的值,是和宽相关的,还是和高相关的 最后按 对应 宽或者高 方向, 按比例去缩放, 最后达到适配的效果

而 Margin 和 Padding 的属性, 会涉及到4个方向 会根据宽高的方向,计算不同的比例 所以,这里对应的计算方式 和 AutoAttr的apply(View view) 中的实现有所区别 要么在 AutoAttr的apply(View view) 中添加判断 (这样,后期会修改比较多) 这里就在 子类中 Override 我们一起看一下代码

MarginAttr

--上面略--
@Override
public void apply(View view)
{
    if (!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams))
    {
        return;
    }
    if (useDefault())
    {
        ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
        lp.leftMargin = lp.rightMargin = getPercentWidthSize();
        lp.topMargin = lp.bottomMargin = getPercentHeightSize();
        return;
    }
    super.apply(view);
}
--下面略--

这里判断useDefault()以后,不同方向不同计算后, 再统一设置 view.setPadding(l, t, r, b); 并且return,以免走父类的apply(view) 【主观认为,这里只设置一位1, 所以useDefault() 肯定是true】

PaddingAttr

--上面略--
@Override
public void apply(View view)
{
    int l, t, r, b;
    if (useDefault())
    {
        l = r = getPercentWidthSize();
        t = b = getPercentHeightSize();
        view.setPadding(l, t, r, b);
        return;
    }
    super.apply(view);
}
--下面略--

和上面类似,就不描述了

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.09.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 回顾
  • 回顾3个抽象方法
  • MarginAttr和PaddingAttr的特殊
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档