我创建了一个自定义
ViewGroup
,它扩展了 ConstraintLayout
并动态地将其自身添加为视图。在这个 ViewGroup
中,我添加了 EditText
和 TextView
元素。我的目标是第一个 EditText
受到三个侧面的约束:top
、bottom
和 start
。以下视图应放置在右侧,从上一个视图的 end
开始。
但是,我遇到两个问题:
EditText
不会显示,除非它在所有四个侧面都受到约束,这不是我的意图。我只希望它在三个侧面受到限制。width
和 height
都设置为 wrap_content
,视图仍占据整个布局。可能导致这些问题的原因是什么?如何实现所需的布局行为?
EditText
的代码:
EditText editText = new EditText(this.context);
editText.setId(generateViewId());
editText.setLayoutParams(this.layoutParams);
editText.setMinWidth(convertDpToPx(20));
editText.setMinHeight(convertDpToPx(20));
editText.setTextSize(regularTextSizeSP);
editText.setTextColor(textColorID);
editText.setTypeface(typeFace);
editText.setBackground(null);
editText.setText(expression);
editText.setShowSoftInputOnFocus(false);
editText.setIncludeFontPadding(false);
editText.setPadding(0, 0, 0, 0);
editText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
editText.setMovementMethod(null);
editText.setFocusableInTouchMode(true);
addViewToConstraint(editText);
addViewToConstraint
方法:
constraintSet = new ConstraintSet();
constraintSet.clone(this);
constraintSet.connect(view.getId(), ConstraintSet.START, this.getId(), ConstraintSet.START);
// constraintSet.connect(view.getId(), ConstraintSet.END, this.getId(), ConstraintSet.END);
constraintSet.connect(view.getId(), ConstraintSet.TOP, this.getId(), ConstraintSet.TOP);
constraintSet.connect(view.getId(), ConstraintSet.BOTTOM, this.getId(), ConstraintSet.BOTTOM);
constraintSet.applyTo(this);
我通过一个小小的改变解决了这个问题。我在代码中的
addView()
之前调用了 constraintSet.applyTo()
。但是当我改变它并在 addView()
之后调用 constraintSet.applyTo()
时,它就起作用了。 editText
和constraintSet.connect()
都没有问题。