当你需要在代码中动态给约束布局添加约束,而不能在xml文件中写约束的时候,你需要用到ConstraintSet这个类,谷歌给我们写的很清楚。https://developer.android.google.cn/reference/android/support/constraint/ConstraintSet.html
但是,我在动态写约束的时候遇到一个问题,上代码
ConstraintLayout cl = findViewById(R.id.parent_layout);
Button b1 = new Button(this);
Button b2 = new Button(this);
cl.addView(b1);
cl.addView(b2);
b1.setId(View.generateViewId());
b2.setId(View.generateViewId());
ConstraintSet set = new ConstraintSet();
set.clone(cl);
set.connect(b1.getId(), ConstraintSet.TOP, b2.getId(), ConstraintSet.BOTTOM);
set.applyTo(cl);
我发现失效,b1并没有按照我想要的放在b2下面。由于种种努力,最后终于找到解决方法。Id的设置必须要在addView之前,如果先addView然后再设置id就会失效,不知道是不是约束布局的bug,但是相对布局就没有问题。所以解决方案就是在addView之前设置id即可。
ConstraintLayout cl = findViewById(R.id.parent_layout);
Button b1 = new Button(this);
Button b2 = new Button(this);
b1.setId(View.generateViewId());
b2.setId(View.generateViewId());
cl.addView(b1);
cl.addView(b2);
ConstraintSet set = new ConstraintSet();
set.clone(cl);
set.connect(b1.getId(), ConstraintSet.TOP, b2.getId(), ConstraintSet.BOTTOM);
set.applyTo(cl);
当你需要在代码中动态给约束布局添加约束,而不能在xml文件中写约束的时候,你需要用到ConstraintSet这个类,谷歌给我们写的很清楚。https://developer.android.google.cn/reference/android/support/constraint/ConstraintSet.html 但是,我在动态写约束的时候遇到一个问题,上代码 ...
Android
约束
布局
ConstraintLayout
的基本使用
约束
布局
ConstraintLayout
面世已有很长一段时间了,但我一直没有关注这个
Android
中继五大
布局
后的新
布局
的使用。近日在网友的讨论的强烈推荐下,尝试了
ConstraintLayout
。使用之后的最大感触就是:为什么我不早点在项目中尝试
ConstraintLayout
!!!
本篇文章,旨在记录ConstraintLay...
动态
设置
ConstraintLayout
约束
以前一直是在
布局
里直接
设置
ConstraintLayout
的
约束
,前几天遇到了一个有点特殊的需求,需要
动态
设置
布局
,xml
布局
使用的
ConstraintLayout
,所以就立马恶补
动态
设置
ConstraintLayout
约束
的知识,总结如下。
获取要
设置
目标控件的父
布局
。
val
constraintLayout
Root = getView<
ConstraintLayout
>(R.
id
.constraint_dynamics_root)
val
constraintLayout
Root = viewBinding.layoutStepAward
val constraintSet = ConstraintSet()
constraintSet.clone(
constraintLayout
Root)
constraintSet.connect(viewBinding.bubble.
id
, ConstraintSe.
这种情况可能是由于移动端浏览器对`fixed`和`absolute`定位元素的渲染机制不同所导致的。在移动端浏览器中,`fixed`定位元素的位置是相对于视口而不是文档进行定位的,而`absolute`定位元素则是相对于最近的非`static`定位祖先元素进行定位的。因此,如果一个`fixed`定位元素的祖先元素包含了一个
设置
了`overflow`属性的容器,则在移动端浏览器中可能会导致`fixed`定位元素的位置不再相对于视口进行定位,而是相对于该容器进行定位。
为了
解决
这个
问题
,你可以尝试将`fixed`定位元素的祖先元素中最近的非`static`定位元素
设置
为`fixed`定位,以确保该元素的位置始终相对于视口进行定位。或者,你可以考虑使用JavaScript来
动态
计算`fixed`定位元素的位置,以确保其位置始终正确。