美文网首页
无处安放的AndroidTips:ConstraintLayou

无处安放的AndroidTips:ConstraintLayou

作者: 正合适_8d63 | 来源:发表于2019-01-21 10:02 被阅读0次

ConstraintLayout的尺寸 dimensions

有时候,我们需要创建一些固定方向比的 View 组件,最常使用固定横纵比的就是当 ImageView 用于展示一些固定横纵比的图片的时候。举些例子,书面封面(尺寸横纵比多种多样),电影海报(一般是 4:6 ),电影剧照(一般是 1.85:1 或 2.39:1 ),电视剧(一般是 4:3 或 16:9 )

对于不熟悉什么是横纵比的,横纵比就是表示了 View 的宽度与高度的比例 w:h 。例如,对于一个拥有横纵比为 4:6 拥有宽度为 40dp 的 View 组件有着高度是 60dp ,若它的宽度改为 30dp 则它的高度就是 45dp 。

若我们现实的图片能保证同样的横纵比和像素大小,我们可以简单的在两个方向上使用 wrap_content 即可。然而,现实情况由于数学四舍五入等多种原因都有可能造成实际现实的一些小误差。如果只是现实一个图片可能不会有多大问题,但是如果多个图片展示的时候小问题也会被有很不好的视觉效果,甚至当有 View 对齐于这些图片的 ImageView 的时候,也因此产生了变化,整体就会造成布局不平衡混乱了。

对于这个问题的解决方案之一是,通过创建继承于 ImageView 的子类,并通过覆写 onMeasure() 来实现固定横纵比的布局。常用的 support library 中的 PercentLayout 也提供了一些机制来结局这类横纵比问题。

同样的 ConstraintLayout 也提供了机制来专门解决这个问题,选择想要控制横纵比的 View 然后通过属性视图中修改 ratio 值来改变横纵比,如下图红色圈内设置:

图一

如上图,我们设置的 View 组件有着向父组件的 start 和 top 边缘的约束,它的 end 边缘则约束向一条参考线,而 bottom 边缘则没有被约束,这个 View 的 layout_width 和 layout_height 都被设置成 match_constraint,表示他们会根据所有的约束来设置宽高。在布局阶段这个组件的宽度就被计算好了,但是它的高度好像没有被确定。然后,因为设置了宽高横纵比,高度其实也被确定了,只是宽度的一个函数输出值(在以上例子中横纵比是 16:9 )

这样设置的好处就是,当宽度变化的时候,高度自动跟着变化,如下图通过移动这个 View 组件 end 边缘约束向的参照线就可以看到效果。

图二

在 XML 中的尺寸横纵比 DimensionRatio

图三

可以发现,设置横纵比的属性是 app:layout_constraintDimensionRatio ,而这个值有两个部分组成:方向和比例值。

通过上面的视图编辑器,我们已经知道了宽度就是输入的固定值,从而设置了方向是 h 标识了 horizontal 。其实这个方向可以不用设置,在运行时的 layout 布局过程就可以计算推断出来,但显示的在 xml 源码中声明避免了所有可能出现模棱两可的情况发生。在大多数情况下,这非常不必要因为本身方向是不言自明的,就像例子中,唯有高度没被约束,很容易推断出来高度是根据宽度来的变量函数。

这种横纵比的组件往往又很大的说服力,当横纵比的权利被赋予的时候。

最后还要提到的是,上文提到的宽高属性被设置成 match_constraint 实际上在 XML 源码中表现是被设置成 0dp,这就像 LinearLayout 的 weight 属性一样,会在 XML 中设置为 0dp ,而实际大小会根据父组件在布局 layout 过程中的大小来决定计算出来。

原文链接

相关文章

  • 无处安放的AndroidTips:ConstraintLayou

    ConstraintLayout的尺寸 dimensions 有时候,我们需要创建一些固定方向比的 View 组件...

  • 无题

    无处安放的灵魂。 无处安放的心, 何以为家?

  • 无处安放的你

    无处安放的青春 无处安放的回忆 无处安放的情绪 无处安放的灵魂 点点滴滴 丝丝缕缕 淅淅沥沥 来来回回 整个世界 ...

  • 2018-09-26

    无处可去,无处安放

  • 无处安放的人,无处安放的心

    改完代码回来天已经黑了,在这个大姨妈畅快肆意的日子里,饿,来得尤其的声嘶力竭。 别误会我不是程序员,就凭我在这智商...

  • 无处安放的小心思

    微妙的关系,总会滋生很多小心思。 多情的小心思,从来无处安放。 无处安放,却又肆意横生。 越是无处安放,越是无限滋...

  • 无处安放的人生

    看了冷兄那篇无处安放的诗稿 我想 倒不如想想无处安放的人生好点 因为那些无处安放的诗篇 付之一炬便了了 那些无处安...

  • AndroidTips

    1. Rest 1.1 序列化json自动命名: json中如果有下划线命名的key,例如 user_name...

  • 独孤,独孤,可奈何?

    “最近很是烦恼!” “你不愁吃不愁喝,有家有友有工作,有啥好烦的?” 无处安放的手,无处安放的思绪,无处安放的情绪...

  • 未眠

    未眠, 只因我收容了夜色, 夜色,却不肯收容我; 我有旧梦无处安放, 我有行囊无处安放, 我有我, 无处安放。

网友评论

      本文标题:无处安放的AndroidTips:ConstraintLayou

      本文链接:https://www.haomeiwen.com/subject/gubqjqtx.html