2023年7月13日发(作者:)
Android动态布局之ConstraintLayout(通过代码参数控制⼦View的布局)Constraintlayout布局如今已是Android的默认布局,它的优势是具有⾮常良好的屏幕适配特性和灵活的布局风格,既可通过传统的⽂档控制,⼜可以通过可视化⼯具来构建布局。关于Constraintlayout的详细介绍和使⽤⽅法可以参 。接下来进⼊正题:众所周知,像RelativeLayout这样的布局可以通过addRule()动态的把⼦View布局到特定的位置。可能有的看官会说:”我⼀开始就把布局写在⾥不⾏吗?“ 既然这样,我们不妨设想下你接到⼀个需求,你有两个按钮从左到右分别为btn_one和btn_two,点击btn_one后该按钮会跑到btn_two的右边,点击btn_two后该按钮会跑到btn_one的左边(实际需求⼀定还会更加复杂)。所以xml控制的静态布局是有弊端的,这时通过代码实现的动态布局就派上了⽤场,类似的还有outParams(layoutParams)也是如此。那么Constraintlayout可以实现类似的动态布局吗?这答案当然是肯定的,Constraintlayout不仅能实现动态布局,还能在动态布局的基础上进⾏view动画。接下来我们就详细介绍下:⾸先介绍ConstraintSet对象。它是⼀个ConstraintLayout 内所有⼦元素的约束条件、也包括外边距和内边距。你可以使⽤ConstraintSet对象在代码中实时更新你ConstraintLayout 内所有⼦元素的布局,从⽽达到动态布局的效果。要使⽤要使⽤ ConstraintSet需要指定两个xml布局⽂件,⼀个是初始布局(例如:activity_),另⼀个是变化后的布局(这⾥我命名为:constraint_)。如下为 Constraintlayout的动态布局Demo:1. 在activity_中,我们为布局的创建了⼀个 android:id="@+id/constraint_one" id, 其次就是⼀个Button和TextView,初始时Button在TextView上⽅,当我们点击按钮后该Button会移动到TextView下⽅,具体布局⽂件代码如下:
2. 我们还需要新建⼀个constraint_。并为该布局定义⼀个android:id="@+id/constraint_two".注意这⾥有⼀个魔⿁细节,我们只⽤将需要需要改变布局的⼦View添加进去就⾏,并且该⼦View的android:id需要和初始布局(也就是上⾯的activity_)中的保持⼀致。因为我只想改变id为loadImage按钮的布局,所以我只把它给写⼊constraint_中,⽽TextView则没有写⼊,这⾥需要看官们特别注意下,具体代码如下所⽰:
//分别创建两个ConstraintSet对象,并把改变前后的两个布局给保存到其中,这⾥使⽤的是`.clone`的⽅法 ConstraintSet mConstrainSet_one = new ConstraintSet(); ConstraintSet mConstrainSet_two = new ConstraintSet(); mConstrainSet_(constraint_one); mConstrainSet_(this, aint_two);
//对按钮添加点击事件 lickListener(view -> { if (isConstraintOne) { mConstrainSet_o(constraint_one);//将改变后的布局应⽤进去
//此⽅法是给这次改变添加个动画效果 //添加了此句代码后,Button的改变会以动画的形式逐渐移动到改变后的⽬标位置 elayedTransition(constraint_one);
isConstraintOne = false; } else { mConstrainSet_o(constraint_one);//恢复到初始时的布局状态 isConstraintOne = true; } }); }}好了,这就是关于 Constraintlayout动态布局的基本介绍及其简单的使⽤⽅法和Demo案例。欢迎⼤家对我进⾏指正或者补充,如果对你有所帮助不妨点赞⿎励下,祝⼤家技术稳步前进,⼯资早⽇翻倍(狗头坏笑)!
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689218106a222540.html
评论列表(0条)