扩展 ConstraintLayout 的自定义 ViewGroup 在视图未限制为 4 条边时不会显示视图

问题描述 投票:0回答:1

我创建了一个自定义

ViewGroup
,它扩展了
ConstraintLayout
并动态地将其自身添加为视图。在这个
ViewGroup
中,我添加了
EditText
TextView
元素。我的目标是第一个
EditText
受到三个侧面的约束:
top
bottom
start
。以下视图应放置在右侧,从上一个视图的
end
开始。

但是,我遇到两个问题:

  1. EditText
    不会显示,除非它在所有四个侧面都受到约束,这不是我的意图。我只希望它在三个侧面受到限制。
  2. 即使
    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);
android layout
1个回答
0
投票

我通过一个小小的改变解决了这个问题。我在代码中的

addView()
之前调用了
constraintSet.applyTo()
。但是当我改变它并在
addView()
之后调用
constraintSet.applyTo()
时,它就起作用了。
editText
constraintSet.connect()
都没有问题。

© www.soinside.com 2019 - 2024. All rights reserved.