EditText的selectAll()不选择文本,而是将光标移动到位置0

eya*_*zba 7 android android-edittext

我的情况是:我有一个EditText,在它下面我有一个按钮,叫做"全选".它的目的是让用户按下它来选择所有文本.
当点击该按钮时,我援引selectAll()的EditText,但不是选择所有文字,在某些情况下(通常,当光标已经定位在文本中的某处),将光标移动到位置0(文开始)和文本遗体未选中.再次单击该按钮将选择全部.但当然它应该在第一次点击时发生.

从这个问题:Android EditText selectAll()不起作用,如果一个点击android 4.x中的相同字段只有它似乎这是Android 4.0及更高版本中的一个错误.(在Google问题跟踪器中没有提及).
有谁知道克服这个问题的方法?似乎问题也在其他选择方法中,而不仅仅是selectAll().

(ps这个问题与我上面提到的问题有点重复.但我打开了另一个问题,因为该问题的作者满意并选择了部分答案(设置android:selectAllOnFocus="true"),而在我的情况和场景中它并没有帮助我并没有解决问题.

谢谢.

Eny*_*yby 7

IME引起的问题.如果显示光标拖动指针则选择必须为零宽度.

你需要取消拖动指针.它可以通过更改文本进行.例如replace:

            Editable text = edit.getText();
            if (text.length() > 0) {
                text.replace(0, 1, text.subSequence(0, 1), 0, 1);
                edit.selectAll();
            }
Run Code Online (Sandbox Code Playgroud)

我们用相同的符号替换文本的第一个符号.它会导致取消拖动指针并允许选择没有错误.


Ras*_*had 1

尝试这个:

yourEditText.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        //((EditText)v).selectAll();
        ((EditText)v).setSelection(startValue, stopValue);
    }
});
Run Code Online (Sandbox Code Playgroud)

或这个:

yourEditText.setOnFocusChangedListener(new OnFocusChangedListener(){
    @Override
    public void onFocusChange(View v, boolean hasFocus){
        if (hasFocus){
            //((EditText)v).selectAll();
            ((EditText)v).setSelection(startValue, stopValue);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

或这个:

theEditText.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        EditText editText = (EditText)view;
        editText.setSelection(editText.getText().length()-1); // selects all the text
    }
});
Run Code Online (Sandbox Code Playgroud)

或这个:

theEditText.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        EditText editText = (EditText)view;
        editText.performLongClick();
    }
});
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 .. :)