当前位置: 首页 > 知识库问答 >
问题:

如何在运行时向约束布局添加视图?

戈嘉慕
2023-03-14
private void createUtilForm(){
    titleInputLayout = new TextInputLayout(this);
    int titleId = ViewCompat.generateViewId();
    Log.d("AddEmployee", "createUtilForm: titleId"+ titleId);
    titleInputLayout.setId(titleId);
    ConstraintLayout.LayoutParams clpTitle = new ConstraintLayout.LayoutParams(
            ConstraintLayout.LayoutParams.MATCH_CONSTRAINT, ConstraintLayout.LayoutParams.WRAP_CONTENT);

    childConstraintLayout.addView(titleInputLayout, clpTitle);

    ConstraintSet utilFordSet = new ConstraintSet();

    utilFordSet.clone(childConstraintLayout);
    utilFordSet.connect(titleInputLayout.getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START);
    utilFordSet.connect(titleInputLayout.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END);
    utilFordSet.connect(titleInputLayout.getId(), ConstraintSet.TOP, allowanceHeaderTV.getId(), ConstraintSet.BOTTOM);
    utilFordSet.connect(deductionHeaderTV.getId(), ConstraintSet.TOP, titleInputLayout.getId(), ConstraintSet.BOTTOM);

    utilFordSet.applyTo(childConstraintLayout);
}

XML布局

    <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".AddEmployeeActivity">
    <ScrollView
        android:id="@+id/child_scrollview"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/add_employee_toolbar">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/child_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">


            <TextView
                android:id="@+id/allowance_header_tv"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="16dp"
                android:layout_marginTop="16dp"
                android:layout_marginEnd="8dp"
                android:text="@string/allowance_header_hint"
                android:textSize="24sp"
                app:layout_constraintEnd_toStartOf="@+id/allowance_add_ib"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="parent" />

            <ImageView
                android:id="@+id/allowance_add_ib"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginEnd="16dp"
                app:layout_constraintBottom_toBottomOf="@+id/allowance_header_tv"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="@+id/allowance_header_tv"
                app:srcCompat="@drawable/ic_add" />

            <TextView
                android:id="@+id/deduction_header_tv"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="16dp"
                android:layout_marginTop="16dp"
                android:layout_marginEnd="8dp"
                android:text="@string/deduction_header_hint"
                android:textSize="24sp"
                app:layout_constraintEnd_toStartOf="@+id/deduction_add_ib"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/allowance_header_tv" />

            <ImageView
                android:id="@+id/deduction_add_ib"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginEnd="16dp"
                android:contentDescription="@string/img_desc_label"
                app:layout_constraintBottom_toBottomOf="@+id/deduction_header_tv"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="@+id/deduction_header_tv"
                app:srcCompat="@drawable/ic_add" />

        </androidx.constraintlayout.widget.ConstraintLayout>
    </ScrollView>

</androidx.constraintlayout.widget.ConstraintLayout>

共有1个答案

严嘉良
2023-03-14

这是我过去所做的…!

1:只需在acitivity.xml文件的约束布局内创建一个空的线性布局,并定义约束(如果有的话)。

2:为文本字段创建一个textfield.xml文件

 public void addLayout() {


    LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);

    final View row = inflater.inflate(R.layout.textfield, null);

    linearLayout.addView(row, linearLayout.getChildCount() - 1);

}
 LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  public void RemoveLayout() {
        if (linearLayout.getChildCount() > 0) {
            linearLayout.removeViewAt(linearLayout.getChildCount() - 1);
        }
    }
 类似资料:
  • 我有两个组件和。每个组件都是由<code>ConstraintLayout</code>创建的。现在,我从上面的组件创建<code>WelcomeScreen</code>。 用例1:使用静态< code>ConstraintLayout(在< code>ConstraintLayout内的< code>ConstraintLayout) 结果:布局预览不显示任何内容 用例2:<代码>Welcom

  • 我需要使用GridBagLayout,但我得到以下错误。你能帮忙吗? java.security.IllegalArgumentException:不能添加到布局:约束必须是一个GridBagConstraint在ontroller.doGridBagLjava.security.LayoutComponent(Unknown Source)在mpl.doCjava.awt.Impl(Unknow

  • 英文原文:http://emberjs.com/guides/views/adding-layouts-to-views/ 视图可以拥有一个次模板来包裹其主模板。如同模板一样,布局是可以插入到视图标签下的Handlebars模板。 通过设置layoutName属性来配置视图的布局模板。 而布局模板通过Handlebars的{{yield}}助手来指定在哪里插入主模板。视图渲染后的template的

  • 我的约束布局的版本是。在我的布局中包含了一个工具栏之后,工具栏的左右两边都有空间,如下图所示 这是我的工具栏的代码 我以以下方式将其包含在我的布局中 我没有在布局文件的根元素中使用任何附加的填充或边距。 另一个奇怪的事情是,如果我编译或构建程序,我的代码会自动改变,比如 更改为

  • 我有一个表格视图,里面有一个单元格。单元格包含三个标签:标题标签和下面两个相互对应的标签。有时,如果这两个标签不包含数据,我需要隐藏下面这两个标签,并将“标题标签”的“顶部空间到容器”更改为“中心Y到容器”。当然,当两个标签包含数据时,还会恢复约束。这是一个简单演示项目的截图,只是为了展示这个想法: 更新马克斯·麦克劳德的回答指向了正确的方向。技巧是在第一个和第二个标签隐藏时向下推标题标签。所以,

  • 问题内容: 我有一个名为“ Person”的表名,下面是列名 我忘了约束。 现在,我尝试使用以下查询将“ 约束” 添加到名为的现有列中, 我收到语法错误…。 问题答案: 只需使用查询并将其添加到您现有的列定义中即可。例如: 请注意:使用查询时,您需要再次指定 完整的 列定义。例如,如果您的列具有值或列注释,则需要在语句中与数据类型和一起指定它,否则它将丢失。防止此类情况发生的最安全方法是从查询的输