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

Posted

技术标签:

【中文标题】如何通过在android中按下按钮来添加纯文本视图?【英文标题】:How to add a plain text view with the pressing of a button in android? 【发布时间】:2021-09-08 06:55:05 【问题描述】:

我想学的是,

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

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

通过堆栈溢出和其他通过谷歌浏览,

我所看到的只是在线性布局中添加纯文本,如果我从约束布局切换到线性布局,我的按钮会错位,并不是说我至少实现了添加纯文本的功能文本与线性布局单击按钮。

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

到目前为止,我已经做到了

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

【问题讨论】:

您想在点击添加时将多个编辑文本添加到视图中,还是只添加一个编辑文本并禁用按钮?? 点击按钮时可多次编辑文本到视图 【参考方案1】:

约束布局需要额外的信息,而不仅仅是向布局添加视图,即在布局中附加视图的位置。

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);
       );

【讨论】:

它起作用了,我只改变了我想要的约束,有没有办法让这条线消失?我的意思是输入文本后的editText行? 试试这个***.com/questions/37824790/…【参考方案2】:

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

xml

<EditText
android:visibility = "gone" />

活动

buttonAddNewToDo.setOnClickListener(new View.OnClickListener()

    public void onClick(View view)

        edittext.setvisibility(View.Visible);
    

);

【讨论】:

如果我希望我的编辑文本最初不可见,您的回答很好,但我的问题是我想通过单击按钮获得一个新的编辑文本? 所以每次单击按钮时都会显示新的编辑文本?

以上是关于如何通过在android中按下按钮来添加纯文本视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在自定义视图中按下按钮从超级视图中删除自定义视图?

Android - 按下按钮时将文本视图添加到布局

在表格视图中按下单元格上的按钮时如何创建新单元格

C#:如何在文本框中按下输入触发按钮,但仍允许“Ctrl + A”等快捷方式通过?

按下大视图通知按钮后如何敬酒

在iOS中按下后退按钮时如何创建确认弹出窗口?