2024年最全再学一次ConstraintLayout-一些新特性,2024年最新大学生android开发项目实例

最后

我一直以来都有整理练习大厂面试题的习惯,有随时跳出舒服圈的准备,也许求职者已经很满意现在的工作,薪酬,觉得习惯而且安逸。

不过如果公司突然倒闭,或者部门被裁减,还能找到这样或者更好的工作吗?

我建议各位,多刷刷面试题,知道最新的技术,每三个月可以去面试一两家公司,因为你已经有不错的工作了,所以可以带着轻松的心态去面试,同时也可以增加面试的经验。

我可以将最近整理的一线互联网公司面试真题+解析分享给大家,大概花了三个月的时间整理2246页,帮助大家学习进步。

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是部分内容截图:

部分目录截图

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

可能比较抽象,来看看谷歌画的图:

image.png

他的属性有:

layout_constraintCircle :引用另一个小部件ID
layout_constraintCircleRadius :到其他小部件中心的距离
layout_constraintCircleAngle :小部件应该处于哪个角度(以度为单位,从0到360)

举个例子:


image.png

六、Visibility behavior 可见性行为

当一个View在ConstraintLayout中被设置为gone,那么你可以把它当做一个点(这个view所有的margin都将失效). 这个点是假设是实际存在的.

image.png

举个例子:

image.png

可以看到,按钮3和按钮1中间的margin只有20.

再举个例子:

我将按钮3放到按钮2的右侧,这时是没有给按钮2加android:visibility="gone"的.

image.png

现在我们来给按钮2加上android:visibility="gone"

image.png

这时,按钮2相当于缩小成一个点,那么按钮3还是在他的右侧不离不弃.

七、Dimensions constraints 尺寸限制

在ConstraintLayout中,可以给一个view设置最小和最大尺寸.

属性如下(这些属性只有在给出的宽度或高度为wrap_content时才会生效):

android:minWidth 设置布局的最小宽度
android:minHeight 设置布局的最小高度
android:maxWidth 设置布局的最大宽度
android:maxHeight 设置布局的最大高度

八、Widgets dimension constraints 宽高约束

平时我们使用android:layout_width和 android:layout_height来指定view的宽和高.

在ConstraintLayout中也是一样,只不过多了一个0dp.

  • 使用长度,例如
  • 使用wrap_content,view计算自己的大小
  • 使用0dp,相当于“ MATCH_CONSTRAINT”

image.png

下面是例子

展示出来的是:

image.png

九、WRAP_CONTENT:强制约束(在1.1中添加)

当一个view的宽或高,设置成wrap_content时,如果里面的内容实在特别宽的时候,他的约束会出现问题.我们来看一个小栗子:

image.png

从右侧的图片可以看出,按钮2里面的内容确实是在按钮1的内容的右侧.但是按钮2整个来说,却是没有整个的在按钮1的右侧.

这时需要用到下面2个属性

app:layout_constrainedWidth=”true|false”
app:layout_constrainedHeight=”true|false”

给按钮2加一个app:layout_constrainedWidth="true",来看效果:

image.png

哈哈,又看到了我们想要的效果.爽歪歪.

十、MATCH_CONSTRAINT尺寸(在1.1中添加)

当一个view的长宽设置为MATCH_CONSTRAINT(即0dp)时,默认是使该view占用所有的可用的空间. 这里有几个额外的属性

layout_constraintWidth_min和layout_constraintHeight_min:将设置此维度的最小大小
layout_constraintWidth_max和layout_constraintHeight_max:将设置此维度的最大大小
layout_constraintWidth_percent和layout_constraintHeight_percent:将此维度的大小设置为父级的百分比

这里简单举个百分比的例子:居中并且view的宽是父亲的一半

image.png

It’s so easy! 这极大的减少了我们的工作量.

注意

  • 百分比布局是必须和MATCH_CONSTRAINT(0dp)一起使用
  • layout_constraintWidth_percent 或layout_constraintHeight_percent属性设置为0到1之间的值
十一、按比例设置宽高(Ratio)

可以设置View的宽高比例,需要将至少一个约束维度设置为0dp(即MATCH_CONSTRAINT),再设置layout_constraintDimensionRatio.

举例子:

image.png

该比率可表示为:

  • 浮点值,表示宽度和高度之间的比率
  • “宽度:高度”形式的比率

如果两个尺寸都设置为MATCH_CONSTRAINT(0dp),也可以使用比率。在这种情况下,系统设置满足所有约束的最大尺寸并保持指定的纵横比。要根据另一个特定边的尺寸限制一个特定边,可以预先附加W,“或” H,分别约束宽度或高度。例如,如果一个尺寸受两个目标约束(例如,宽度为0dp且以父节点为中心),则可以指示应该约束哪一边,通过 在比率前添加字母W(用于约束宽度)或H(用于约束高度),用逗号分隔:

上面的代码将按照16:9的比例设置按钮的高度,而按钮的宽度将匹配父项的约束。

十二、Chains(链)

设置属性layout_constraintHorizontal_chainStyle或layout_constraintVertical_chainStyle链的第一个元素时,链的行为将根据指定的样式(默认值CHAIN_SPREAD)更改。

  • CHAIN_SPREAD - 元素将展开(默认样式)
  • 加权链接CHAIN_SPREAD模式,如果设置了一些小部件MATCH_CONSTRAINT,它们将分割可用空间
  • CHAIN_SPREAD_INSIDE - 类似,但链的端点不会分散
  • CHAIN_PACKED - 链条的元素将被包装在一起。然后,子项的水平或垂直偏差属性将影响打包元素的定位

image.png

下面是一个类似LinearLayout的weight的效果,需要用到layout_constraintHorizontal_weight属性:

例子的效果图如下:

image.png

十三、Guideline

这是一个虚拟视图

Guideline可以创建相对于ConstraintLayout的水平或者垂直准线. 这根辅助线,有时候可以帮助我们定位.

layout_constraintGuide_begin 距离父亲起始位置的距离(左侧或顶部)
layout_constraintGuide_end 距离父亲结束位置的距离(右侧或底部)
layout_constraintGuide_percent 距离父亲宽度或高度的百分比(取值范围0-1)

我们拿辅助线干嘛??? 比如有时候,可能会有这样的需求,有两个按钮,在屏幕中央一左一右. 如果是以前的话,我会搞一个LinearLayout,.然后将LinearLayout居中,然后按钮一左一右.

效果图如下:

image.png

现在我们使用Guideline的话,就超级方便了,看代码:

<android.support.constraint.Guideline
android:id=“@+id/gl_center”
android:layout_width=“0dp”
android:layout_height=“wrap_content”
android:orientation=“vertical”
app:layout_constraintGuide_percent=“0.5”/>

十四、Barrier

虚拟视图

Barrier是一个类似于屏障的东西.它和Guideline比起来更加灵活.它可以用来约束多个view.

比如下面的姓名和联系方式,右侧的EditText是肯定需要左侧对齐的,左侧的2个TextView可以看成一个整体,Barrier会在最宽的那个TextView的右边,然后右侧的EditText在Barrier的右侧.

image.png

Barrier有2个属性

  • barrierDirection,取值有top、bottom、left、right、start、end,用于控制 Barrier 相对于给定的 View 的位置。比如在上面的栗子中,Barrier 应该在 姓名TextView 的右侧,因此这里取值right(也可end,可随意使用.这个right和end的问题,其实在RelativeLayout中就有体现,在RelativeLayout中写left或者right时会给你一个警告,让你换成start和end)。
  • constraint_referenced_ids,取值是要依赖的控件的id(不需要@+id/)。Barrier 将会使用ids中最大的一个的宽(高)作为自己的位置。

ps:这个东西有一个小坑,如果你写完代码,发现没什么问题,但是预览出来的效果却不是你想要的.这时,运行一下程序即可.然后预览就正常了,在手机上展示的也是正常的.

例子的代码如下(如果预览不正确,那么一定要运行一下,不要怀疑是自己代码写错了):

<android.support.constraint.Barrier
android:id=“@+id/barrier2”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
app:barrierDirection=“right”
app:constraint_referenced_ids=“tv_name,tv_phone”/>

十五、Group

固定思议,这是一个组. 这也是一个虚拟视图.

可以把View放到里面,然后Group可以同时控制这些view的隐藏.

<android.support.constraint.Group
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:visibility=“gone”
app:constraint_referenced_ids=“btn1,btn2”/>

  • Group有一个属性constraint_referenced_ids,可以将那些需要同时隐藏的view丢进去.
  • 别将view放Group包起来.这样会报错,因为Group只是一个不执行onDraw()的View.
  • 使用多个 Group 时,尽量不要将某个View重复的放在 多个 Group 中,实测可能会导致隐藏失效.
十六、何为虚拟视图

上面我们列举的虚拟视图一共有:

  • Guideline
  • Barrier
  • Group

来我们看看源码

最后

针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

  • Android前沿技术大纲

  • 全套体系化高级架构视频

Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

也可以分享动态给身边好友一起学习!

  • Android前沿技术大纲

    [外链图片转存中…(img-0CYDUGtJ-1715894231167)]

  • 全套体系化高级架构视频

    [外链图片转存中…(img-wlYP0d8D-1715894231168)]

Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值