如何在 android 中按下按钮添加纯文本视图?

How to add a plain text view with the pressing of a button in android?

我想学的是,

单击按钮时,新的纯文本(可编辑)应出现在我在 UI 中创建的默认纯文本下方,其属性与默认纯文本相同(例如,相同的宽度,高度),每一个之间都有一些边距。

我的项目布局类型是约束布局,我希望将我的按钮放置在 UI 的右下角,并且我已将其与约束一一起存档。

通过 google、

浏览堆栈溢出和其他人

我所看到的只是关于在线性布局中添加纯文本,如果我从约束布局切换到线性布局,我的按钮会放错地方而且我至少没有实现通过单击带有线性布局的按钮添加纯文本的功能。

这就是为什么我坚持使用约束布局,至少我的按钮不会放错位置,如果任何布局中有任何方法可以获得我想要的结果,我愿意接受。

到目前为止我已经完成了这个

ConstraintLayout constraintLayout = findViewById(R.id.constraintLayout);
Button buttonAddNewToDo = findViewById(R.id.addNewToDo);

buttonAddNewToDo.setOnClickListener(new View.OnClickListener(){

    public void onClick(View view){

       EditText newToDo =  new EditText(MainActivity.this);
       newToDo.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
       newToDo.setHint("enter new to do");
       constraintLayout.addView(newToDo);
   }

});

代码在 onCreate() 中供参考。

上面的代码所做的是,当点击按钮时,它会创建一个新的纯文本,它位于左上角,

查看上面这段代码的UI(见下图)

enter image description here

您可以在 xml 文件中设计编辑文本,但初始可见性已消失。单击按钮时设置可见性。

xml

<EditText
android:visibility = "gone" />

Activity

buttonAddNewToDo.setOnClickListener(new View.OnClickListener(){

    public void onClick(View view){

        edittext.setvisibility(View.Visible);
    }

});

除了向布局添加视图之外,约束布局还需要额外的信息,即在布局中附加视图的位置。

EditText newToDo =  new EditText(MainActivity.this);
newToDo.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
newToDo.setHint("enter new to do");
constraintLayout.addView(newToDo);

将此视图添加到布局后,为此视图设置约束。要直接在默认文本视图下方添加视图,我们需要该文本视图的 ID,然后是我们将动态生成的所有其他后续视图。

 int lastEditTextId = 0;
 boolean isFirstEditText = true;
 ConstraintLayout constraintLayout = findViewById(R.id.constraintLayout);
 Button buttonAddNewToDo = findViewById(R.id.addNewToDo);

 buttonAddNewToDo.setOnClickListener(new View.OnClickListener() {

       public void onClick(View view) {

         EditText newToDo = new EditText(MainActivity.this);
         newToDo.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
         newToDo.setHint("enter new to do");
         constraintLayout.addView(newToDo);
         newToDo.setId(View.generateViewId());

         //Setting constraint set for the new view
         ConstraintSet constraintSet = new ConstraintSet();
         constraintSet.clone(constraintLayout);

         constraintSet.connect(
           newToDo.getId(),
           ConstraintSet.START,
           ConstraintSet.PARENT_ID,
           ConstraintSet.START
         );
         constraintSet.connect(
           newToDo.getId(),
           ConstraintSet.END,
           ConstraintSet.PARENT_ID,
           ConstraintSet.END
         );

         if (isFirstEditText) {
           constraintSet.connect(
             newToDo.getId(),
             ConstraintSet.TOP,
             YOUR_DEFAULT_TEXT_VIEW.getId(),
             ConstraintSet.BOTTOM
           );
           isFirstEditText = false;
         } else {
           constraintSet.connect(
             newToDo.getId(),
             ConstraintSet.TOP,
             lastEditTextId,
             ConstraintSet.BOTTOM
           );
         }
         lastEditTextId = newToDo.getId();
         constraintSet.applyTo(constraintLayout);
       });