当用户点击
EditView
时,Android会打开键盘,以便用户可以在EditView
中写入内容。问题是,当用户完成输入后,没有办法隐藏键盘。用户必须按下返回按钮才能隐藏键盘。是否有一种方法可以在键盘上显示一个Done
按钮,以隐藏键盘?首先,您需要将目标EditText的android:imeOptions
属性设置为actionDone
,如下所示。这将把您EditText软键盘中的“RETURN”按钮更改为“DONE”按钮。
<EditText
android:id="@+id/edittext_done"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Enter some text"
android:imeOptions="actionDone"
android:singleLine="true"
/>
android:singleLine="true"
жүҚиғҪи®©е®ғжӯЈеёёе·ҘдҪңгҖӮ - Jacksonkr使用TextView.setImeOptions方法,并将参数设置为actionDone,例如textView.setImeOptions(EditorInfo.IME_ACTION_DONE);
textView.setImeOptions(EditorInfo.IME_ACTION_DONE);
- sulaitextView.singleLine(true)
以使这个程序能够正常工作。 - Jacksonkr包含imeOptions
和singleLine
两者:
<EditText
android:id="@+id/edittext_done"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:imeOptions="actionDone"
android:singleLine="true"
/>
获取完成按钮:
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
同时在xml中添加 android:inputType="text"
,以处理从键盘点击完成时的操作。
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
if(actionId == EditorInfo.IME_ACTION_DONE){
// Your action on done
return true;
}
return false;
}
});
`
android:imeActionLabel="Done"
android:singleLine="true"
在 XML 文件中完全正常运作。但这也会导致 editText
在单行中持续输入,而这可能不是你想要的。因此,在你的代码中添加以下内容将确保你不会一直在单行上输入所有内容。
mainText.setHorizontallyScrolling(false);
mainText.setMaxLines("Maximum integer value that you want to provide");
使用这个:
android:singleLine="true"
actionDone
,以防一些设备有不同的反应。 - Jacksonkr将下面这两行添加到你的EditText
中
android:imeActionLabel="Done"
android:singleLine="true"
或者你可以通过这行代码程序化地实现它。
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
在Kotlin中处理隐藏键盘和完成操作的直接方法如下:
// Set action
edittext.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
// Hide Keyboard
val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
true
}
false
}
使用这个方法在主代码中调用edittext.onDone {/*action*/}
。使代码更易读和可维护。
edittext.onDone { edittext.hideKeyboard() }
fun View.hideKeyboard() {
val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}
fun EditText.onDone(callback: () -> Unit) {
// These lines optional if you don't want to set in Xml
imeOptions = EditorInfo.IME_ACTION_DONE
maxLines = 1
setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
callback.invoke()
true
}
false
}
}
如果您想要更多简化使用键盘的方法(显示、关闭、聚焦):阅读此帖子
请不要忘记在edittext Xml中添加这些选项,如果没有在代码中
<EditText ...
android:imeOptions="actionDone"
android:inputType="text"/>
inputType="textMultiLine"
吗?阅读此帖子,不要在Xml中添加imeOptions
或inputType
。xml
文件中使用android:imeOptions="actionDone"
。使用:
android:imeActionLabel="Done"
android:singleLine="true"