我面临的问题是,当用户单击键盘上的下一步按钮时,程序应该专注于屏幕上的下一个EditText,并保持键盘打开,直到屏幕上没有启用的EditTexts。当不再启用EditTexts时,键盘应消失。
另一个问题是,如果有一个EditText当前在屏幕上不可见,那么在用户选择它之前,它不会获得焦点。
我尝试过使用输入法管理器在EditText有焦点时显示键盘,在没有焦点时隐藏键盘。如果不再启用已启用的EditTexts,则键盘仍然存在。
final InputMethodManager imm = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
if (variable.getType().equals("Value")) {
if (variable.getFormat().equals("Number") || variable.getFormat().equals("2Number")) {
viewHolder.inputValue.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(hasFocus){
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
} else if(hasFocus && !viewHolder.inputValue.isEnabled()){
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
});
} else if (variable.getFormat().equals("Text")) {
viewHolder.messageText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(hasFocus){
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
} else if(hasFocus && !viewHolder.inputValue.isEnabled()){
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
});
}
} else if (variable.getType().equals("Message")) {
viewHolder.messageText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(hasFocus){
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
} else if(hasFocus && !viewHolder.inputValue.isEnabled()){
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
});
} else {
//imm.hideSoftInputFromWindow(viewHolder.itemView.getWindowToken(), 0);
}EditTexts存储在回收视图内的cardview中。每张卡都有一个可变类型。单击键盘上的“下一步”按钮时,只有“值”和“消息”变量类型才能获得焦点。
我希望用户能够通过单击键盘上的next按钮在RecyclerView中滚动已启用的EditTexts。如果EditText不在屏幕上的视图内,屏幕应该向下滚动到它以获得焦点。此外,如果EditText被禁用,它将永远不会获得焦点。
发布于 2019-05-23 22:24:26
覆盖onEditorAction方法,并为要使键盘保持打开状态的每个editText返回true。
edittext.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
//optional: you can run some logic here.
}
//return true to not hide the keyboard
return true;
}
});https://stackoverflow.com/questions/56276979
复制相似问题