当焦点集中时,选择EditText中的所有文本


230

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

我该如何实现?

Answers:


517

您可以尝试输入main.xml文件:

android:selectAllOnFocus="true"

或者,在Java中,使用

editText.setSelectAllOnFocus(true);

17
我刚刚了解到这是行不通的,如果UI生成器插入了EditText xml中的</ requestFocus>标签。
machtnix

@machtnix将焦点添加到另一个组件:stackoverflow.com/a/1662088/1020871
Love

160
editText.setSelectAllOnFocus(true);

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


2
同样对我来说..上述解决方案以某种方式不起作用..以编程方式起作用
Martin Christmann

3
对于仍然无法接受上述答案的人:请尝试使用此答案。确认可以正常使用(也已针对进行了测试Fragments)。
MrHadiSatrio 2015年

由于某种奇怪的原因,xml方式无法正常工作,而这种方式却可以。看起来像是SDK中的错误。
ar-g

并且,如果您以编程方式进行聚焦(请事先editText.requestFocus()发出editText.clearFocus()以确保在视图已经聚焦的情况下执行所需的操作
Bad Loser

33
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,并且我希望保持代码尽可能的干净:)还是谢谢!
加利普(Galip)

@TheCottonSilk的解决方案最适合设计时小部件,而Craftos答案最适合动态编辑文本。
比什努·波德尔

2
@Galip OnFocusChangeListener listener = new OnFocusChangeListener...等等...然后editText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener)等等...
SparK

25

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


4
在我的应用程序中,这些字段由可以保存的个人详细信息填充。当我加载这些详细信息时,它将替换“虚拟”文本。使用我的curren方法,我还可以在用户输入详细信息之后选择文本。谢谢您的关心!
加利普(Galip)

12

通过调用程序的焦点和选择来对其进行管理

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

11

您为什么不尝试android:hint =“ hint”为用户提供提示。

当用户单击edittextbox时,“提示”将自动消失。这是正确和最佳的解决方案。


4
好答案。但是,在某些情况下,您可能会使用从设置等中读取的值来填充EditText,并且想要使其尽可能容易地更改这些值:)
nuala 2012年

5

您还可以将OnClick方法添加到editText之后

_editText.setSelectAllOnFocus(true);

并在其中:

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

单击editText后,整个文本即被选中。


4

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

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


2

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

    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时,虚拟键盘将永远不会出现



0

这对我有用:

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

        }
    });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.