我的情况是:我有一个EditText
,在它下面我有一个名为“全选”的按钮。它的目的是让用户通过按下它来选择所有文本
单击按钮时,我在selectAll()
上调用EditText
,但在某些情况下(通常,当光标已经位于文本中某处时),不是选择所有文本,而是移动光标定位0
(文本开头)和文本保持未选中状态。再次单击该按钮将选择全部。但当然应该在第一次点击时发生。
从这个问题:Android EditText selectAll() doesn't works if one taps on the same field in android 4.x only似乎这是Android 4.0及更高版本中的一个错误。 (在Google问题跟踪器中没有提及)
有谁知道克服这个问题的方法?似乎问题也出现在其他选择方法中,而不仅仅是selectAll()
。
(ps这个问题与我上面提到的问题有点重复。但我打开了另一个问题,因为该问题的作者满意并选择了部分答案(设置android:selectAllOnFocus="true"
),而在我的案例和场景中它对我没有帮助,也没有解决问题。
感谢。
答案 0 :(得分:6)
IME引起的问题。如果显示光标拖动指针,则选择必须为零宽度。
您需要取消拖动指针。它可以通过更改文本进行。例如replace
:
Editable text = edit.getText();
if (text.length() > 0) {
text.replace(0, 1, text.subSequence(0, 1), 0, 1);
edit.selectAll();
}
我们用相同的符号替换文本的第一个符号。它会导致取消拖动指针并允许选择没有错误。
答案 1 :(得分:1)
试试这个:
yourEditText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//((EditText)v).selectAll();
((EditText)v).setSelection(startValue, stopValue);
}
});
或者这个:
yourEditText.setOnFocusChangedListener(new OnFocusChangedListener(){
@Override
public void onFocusChange(View v, boolean hasFocus){
if (hasFocus){
//((EditText)v).selectAll();
((EditText)v).setSelection(startValue, stopValue);
}
}
});
或者这个:
theEditText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
EditText editText = (EditText)view;
editText.setSelection(editText.getText().length()-1); // selects all the text
}
});
或者这个:
theEditText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
EditText editText = (EditText)view;
editText.performLongClick();
}
});
希望这会有所帮助.. :)
答案 2 :(得分:1)
我遇到了类似的问题。我用以下代码解决了它(在C#中使用Xamarin,但是等效的Java可以工作):
private void InitFocus()
{
Java.Lang.Runnable rable = new Java.Lang.Runnable(()=>
{
EditText maleCount = FindViewById<EditText>(Resource.Id.txtMaleCount);
maleCount.RequestFocus();
maleCount.SelectAll();
});
new Handler().Post(rable);
}
我有2个控件:一个是下拉菜单,可让您选择一个鸡舍,然后为一周中的每一天选择一组按钮。每当你改变星期几或鸡舍时,我想在txtMaleCount
EditText
中设置焦点然后我想要选中该框中的值(因为它是一个数字而且它们可能会发生变化替换它)。
显然,非直观的部分是需要Post
它。直接(在UI线程上)这样做似乎没有任何效果。