ChatGPT解决这个技术问题 Extra ChatGPT

获得焦点时选择 EditText 内的所有文本

我有一个 EditText,里面有一些虚拟文本。当用户单击它时,我希望它被选中,以便当用户开始输入虚拟文本时被删除。

我怎样才能做到这一点?


S
Shlok Jhawar

您可以在 main.xml 文件中尝试:

android:selectAllOnFocus="true"

或者,在 Java 中,使用

editText.setSelectAllOnFocus(true);

我刚刚了解到这不起作用,如果在 EditText xml 中有一个由 UI 构建器插入的 标记。
@machtnix 将焦点添加到另一个组件:stackoverflow.com/a/1662088/1020871
您可以更新答案以更符合 androidX 更改吗?谢谢 :)
j
j0k
editText.setSelectAllOnFocus(true);

如果您想以编程方式执行此操作,则此方法有效。


对我来说也是如此..上述解决方案不知何故不起作用..以编程方式工作
对于那些仍然对上述接受的答案有疑问的人:试试这个。确认可以正常工作(还针对 Fragments 进行了测试)。
由于某种奇怪的原因,xml 方式无法正常工作,而这个方式可以。看起来像 SDK 内部的错误。
如果您以编程方式聚焦(editText.requestFocus() 事先发出 editText.clearFocus() 以确保在视图已经聚焦的情况下发生所需的操作
D
David Manpearl
EditText dummy = ... 

// android.view.View.OnFocusChangeListener
dummy.setOnFocusChangeListener(new OnFocusChangeListener(){
    public void onFocusChange(View v, boolean hasFocus){
        if (hasFocus) && (isDummyText())
            ((EditText)v).selectAll();
    }
});

感谢您的帮助,但我更喜欢 TheCottonSilk 的解决方案,因为我有 12 个 EditText,而且我希望我的代码尽可能干净:) 无论如何谢谢!
@TheCottonSilk 的解决方案最适合设计时小部件,Craftos 的答案最适合动态编辑文本。
@Galip OnFocusChangeListener listener = new OnFocusChangeListener...等等...然后是 editText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener) 等等...
K
Kevin Coppock

我知道您已经找到了解决方案,但真正执行您所要求的正确方法是仅使用 EditText 中的 android:hint 属性。此文本在框为空且未聚焦时显示,但在选择 EditText 框时消失。


在我的应用程序中,这些字段由可以保存的个人详细信息填充。当我加载这些详细信息时,它将替换“虚拟”文本。使用我当前的方法,我还可以在用户输入详细信息后选择文本。不过还是谢谢你的关心!
A
AMD

通过调用程序的焦点和选择来管理它

{
editabletext.requestFocus();
editabletext.selectAll();
}

V
Vaibhav Vajani

你为什么不尝试 android:hint="hint" 向用户提供提示..!!

当用户单击编辑文本框时,“提示”将自动消失。它是正确和最佳的解决方案。


好答案。但是,在某些情况下,您可能会使用从设置等中读取的值填充 EditText,并且您希望尽可能轻松地更改这些值:)
S
SysDragon

您还可以在 editText 之后添加一个 OnClick 方法

_editText.setSelectAllOnFocus(true);

其中:

_editText.clearFocus();
_editText.requestFocus();

一旦单击editText,就会选择整个文本。


N
Noumenon

SelectAllOnFocus 在 EditText 第一次获得焦点时起作用,但如果您想在用户点击它时选择文本每次,则需要在两次之间调用 editText.clearFocus()

例如,如果您的应用程序有一个 EditText 和一个按钮,则在更改 EditText 后单击该按钮会将焦点留在 EditText 中。然后用户必须使用光标句柄和退格键删除 EditText 中的内容,然后才能输入新值。所以在 Button 的 onClick 方法中调用 editText.clearFocus()


R
RipperJugo

我尝试了上述答案,但直到我切换了语句才起作用。这对我有用:

    myEditText.setSelectAllOnFocus(true);
    myEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onClickMyEditText();
        }
    });

   private void onClickMyEditText() {
       if(myEditText.isFocused()){
        myEditText.clearFocus();
        myEditText.requestFocus();
       }else{
           myEditText.requestFocus();
           myEditText.clearFocus();
       }
   }

我不得不询问焦点是否在EditText上,如果不是,请先请求焦点然后清除它。否则下次我单击 EditText 时,虚拟键盘将永远不会出现


拯救了我的一天。谢谢 :)
J
Julio Cesar Reis

只需将其添加到 .xml 文件中的 editText

安卓:selectAllOnFocus="true"


s
senior_russia

这对我有用:

myEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(myEditText.isFocused()){
                myEditText.requestFocus();
                myEditText.clearFocus();
                myEditText.setSelection(myEditText.getText().length(), 0);
            }else{
                myEditText.requestFocus();
                myEditText.clearFocus();
            }

        }
    });