一、Activity和Fragment中显示和隐藏
- 显示键盘
public static void showKeyBoard(EditText mEditText){
InputMethodManager inputManager = (InputMethodManager) mEditText.getContext() .getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(mEditText, 0);
}
- 隐藏键盘(根据个人情况可以选择不要返回值)
/**
* 隐藏输入面板
*
* @param activity
* @return true 成功隐藏面板,false 没有隐藏面板或者没有面板可以隐藏
*/
public static boolean hideSoftInputFromWindow(Activity activity) {
if (activity != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
return imm.hideSoftInputFromWindow(activity.getWindow().getDecorView().getWindowToken(), 0);
}
}
return false;
}
二、部分Dialog中隐藏和显示
模拟电商APP购物车列表中点击TextView,弹出Dialog选中内容,并弹出键盘进行编辑,点击确定或取消后隐藏键盘
- Dialog中添加一个EditText,获取焦点并选中Model传入文字
- 延迟显示键盘:需要等dialog Show之后在进行弹出键盘,否则键盘不能正确显示。
- 隐藏键盘:部分情况下通过获取activity隐藏键盘并不能成功。这里传入edit来隐藏键盘。
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
//Dialog中添加一个EditText,获取焦点并选中Model传入文字
val edit = EditText(context)
edit.inputType = InputType.TYPE_CLASS_NUMBER
edit.setText(model.quantity.toString())
edit.setSelectAllOnFocus(true)
AlertDialog.Builder(context)
.setCancelable(true)
.setTitle("请输入您的内容")
.setView(edit)
.setPositiveButton("确认") { dialog, which ->
if (edit.text.toString().isNotEmpty()) {
val count = edit.text.toString().toInt()
if (mode.stockQuantity < count)
ToastUtil.showMessage("库存不足")
else {
holder.etNumber.text = Editable.Factory.getInstance().newEditable(count.toString())
onItemClickListener.onNumberChangedUpdatePriceListener(position, count)
}
//隐藏键盘,这里传入edit隐藏键盘。
imm?.hideSoftInputFromWindow(edit.windowToken, 0)
}
}
.setNegativeButton("取消") { dialog, which ->
imm?.hideSoftInputFromWindow(edit.windowToken, 0)
}
.show()
//延迟显示键盘:需要等dialog Show之后在进行弹出键盘,否则键盘不能正确显示。
val timer = Timer()
timer.schedule(object : TimerTask() {
override fun run() {
imm.showSoftInput(edit, 0)
}
}, 300)
写在最后:1、获取输入法管理器 2、显示、隐藏软键盘(传入对应的环境或控件)