我正在尝试让Android在获得焦点时选择EditText字段中的所有文本。我在布局中使用了这个属性(在两个字段上):
android:selectAllOnFocus="true"
我不确定这是否相关,但要将光标移到第一个可编辑字段(之前还有一个禁用字段),我正在使用以下命令:
quizStartNum.setFocusable(true);
quizStartNum.requestFocus();
但是,当首次显示布局时光标确实移动到所需的字段,文本不会突出显示;相反,光标结束于文本的左侧,即默认行为。如果我通过触摸移动到第二个字段,则根据需要选择所有文本。然后,如果我再次通过触摸它移回第一个字段,也会完全选择文本。我想从一开始就有这种行为。有没有办法做到这一点?
答案 0 :(得分:3)
如果android:selectAllOnFocus="true"
不起作用,请尝试在该特定EditText上调用setSelectAllOnFocus(true)
。
如果这也不起作用,这是之前SO帖子的另一种解决方法。
EditText dummy = ...
dummy.setOnFocusChangedListener(new OnFocusChangedListener(){
public void onFocusChange(View v, boolean hasFocus){
if (hasFocus) && (isDummyText())
((EditText)v).selectAll();
}
});
答案 1 :(得分:1)
我有一个类似的问题,android:selectAllOnFocus="true"
对我不起作用。
原因是我以编程方式要求将焦点显示在EditText上,然后再显示它。因此,如果要在AlertDialog中对EditText执行此操作,请确保在请求将焦点移至EditText之前将其显示。
答案 2 :(得分:1)
EditText在显示后应聚焦。
下面的锻炼对我有用,
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Set Input Methode
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}
@Override
public void onStart() {
super.onStart();
new Handler().post(new Runnable() {
@Override
public void run() {
Dialog dialog = getDialog();
if (dialog != null) {
// Set Layout
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
// Set Cancelable False
setCancelable(false);
// Set Focus Here <------------------------
uiET_myTextView.requestFocus();
}
}
});
}
答案 3 :(得分:0)
尝试删除焦点命令。它们不是必需的,Android应该自动关注第一个字段吗?
答案 4 :(得分:0)
我会参考this older post。
如果您只是希望EditText
显示提示(“此处有什么内容”),您可能需要使用Android的XML属性hint
(link)。
答案 5 :(得分:0)
我还注意到,使用android:selectAllOnFocus =“ true”似乎不起作用,我使用鼠标在仿真器中选择EditText,但是如果我用手指触摸它,就好像在电话上一样,它可以工作。如果您的计算机上没有触摸屏,则可能必须在物理设备上安装应用程序才能对其进行测试。 在这种情况下,Android Studio可能无法识别鼠标