如何在单击按钮时使 TextView 可编辑?

How to make a TextView editable at the click of a button?

我有一个应用程序可以显示数据库中的某些内容并允许用户对其进行编辑。我有一个 activity 在某些文本视图中显示这些详细信息。现在,屏幕底部有一个 "EDIT" 按钮。单击此按钮时,我想让文本视图可编辑(最初是只读的)以便可以更新数据库。另外,我希望 "EDIT" 按钮变成 "SAVE" 按钮。我知道我可以为此使用另一个 activity,但是有没有办法在同一个 activity 中做到这一点?

您最好将 TextView 切换为 EditText 并使用 editText.setEnabled(boolean) 切换它以获得您想要的效果

EditText是一个TextView,它可以做什么TextView可以做得更好

所以假设你有一个 TextView

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"        
    android:text="i am a text"
    android:textColor="#243b03" />

并且您希望它可以通过单击按钮进行编辑;在你的点击添加这个

   TextView.setCursorVisible(true);
   TextView.setFocusableInTouchMode(true);
   TextView.setInputType(InputType.TYPE_CLASS_TEXT);
   TextView.requestFocus(); //to trigger the soft input

它们不是静态的,但我将其设为静态以便您知道哪个视图对象的方法是那些。关于您的按钮,在输入文本后,您将文本更改为 "done" 或其他内容,ButtonTextView 扩展,因此将其视为对 TextWatcher 的研究

使 textview 可编辑有其局限性,例如无法修改其中已有的数据(检查 this 答案)

您可以只使用 EditText 并在 xml 中使用 android:inputType="none" 或在 activity/fragment 中使用 <your_editText>.setEnabled(false) 使其成为只读。用户单击“编辑”后,您可以通过将以下语句放在按钮的 onClick 方法中来使 editText 可编辑。

<your_editText>.setEnabled(true) <your_editText>.requestFocus();

关于将 EDIT 按钮变为 SAVE,您可以在 onClick 方法中放置一个计数器,它会跟踪点击的顺序。第一次点击后,您可以使用

更改按钮文本

<your_button>.setText("SAVE")

下次单击时,您可以执行用于保存数据的任何语句。