场景一、自动获取焦点并弹出输入法
当页面显示就需要弹出输入法时,便可以通过setSoftInputMode
方法调整输入法模式。
//模式切换为显示
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
//获取焦点
mEditText.requestFocus()
该方法参数:
参数 | 介绍 |
---|---|
SOFT_INPUT_STATE_UNSPECIFIED | 软键盘没有指定状态,由系统决定 |
SOFT_INPUT_STATE_UNCHANGED | 软键盘保持上次状态 |
SOFT_INPUT_STATE_HIDDEN | 软键盘被隐藏 |
SOFT_INPUT_STATE_ALWAYS_HIDDEN | 软键盘总是被隐藏 |
SOFT_INPUT_STATE_VISIBLE | 软键盘显示 |
SOFT_INPUT_STATE_ALWAYS_VISIBLE | 软键盘总是显示 |
SOFT_INPUT_ADJUST_UNSPECIFIED | 由系统自行决定是隐藏还是显示 |
SOFT_INPUT_ADJUST_RESIZE | 调整屏幕的大小以便留出软键盘的空间 |
SOFT_INPUT_ADJUST_PAN | 自动移动以便当前焦点不被键盘覆盖 |
SOFT_INPUT_ADJUST_NOTHING | 窗口将不会调整大小,也不会被平移以使其焦点可见 |
场景二、获取焦点但不弹出输入法
即使EditText获取焦点,也不允许输入法弹出。
这时候就可以设置setShowSoftInputOnFocus
为false;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
val cls = EditText::class.java
val method: Method
try {
method =
cls.getMethod("setShowSoftInputOnFocus", Boolean::class.javaPrimitiveType)
method.isAccessible = true
method.invoke(mEditText, false)
} catch (e: Exception) {
}
} else {
mEditText.showSoftInputOnFocus = false
}
场景三、不允许弹出编辑菜单
可以通过重写两个回调,来解决。
mEditText.customInsertionActionModeCallback = object : ActionMode.Callback {
override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
return false
}
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
return false
}
override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
return false
}
override fun onDestroyActionMode(mode: ActionMode?) {}
}
mEditText.customSelectionActionModeCallback = object : ActionMode.Callback {
override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
return false
}
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
return false
}
override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
return false
}
override fun onDestroyActionMode(mode: ActionMode?) {}
}