我认为这将是一个简单的事情来实现,但显然不是。我有一个片段2 editTexts和1 TextView。都有自定义的背景绘制。这是我正在寻找的行为:
- 当片段打开时,没有焦点-正在工作
- 当你点击其中一个编辑时,它得到焦点,所有文本被选中,软键盘在数字模式下打开-这也在工作
- 输入新号码后,点击软键盘右下角的蓝色键(选项卡或复选标记符号),软键盘关闭,没有任何焦点-光标不闪烁。-这就是我不能工作的原因。
请帮忙。Kotlin或Java OK
您需要实现这个逻辑(如果您愿意,您可以进一步升级它,这只是一个示例)
布局:
...
<View
android:id="@+id/f_c_focus_view"
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0dp"
android:layout_height="0dp" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionDone"
android:inputType="number" />
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionDone"
android:inputType="number"/>
...
在布局中你可以看到隐藏的'焦点'视图,这是必要的拦截焦点,因为如果你有一个EditText作为视图的第一个组件,它总是会收到焦点。我的EditText组件有一个imeOptions="actionDone"
,我将在代码中进一步处理,你可以有不同的imeOptions。
代码:
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
...
focusView.requestFocus() // intercept focus on view created
editText1.setOnEditorActionListener { v, actionId, _ ->
when(actionId) {
EditorInfo.IME_ACTION_DONE -> { // handle checkmark key press on the keyboard
v.clearFocus()
hideKeyBoard(v)
}
}
false
}
editText2.setOnEditorActionListener { v, actionId, _ ->
when(actionId) {
EditorInfo.IME_ACTION_DONE -> {
v.clearFocus()
hideKeyBoard(v)
}
}
false
}
...
}
private fun hideKeyBoard(v: View) {
val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(v.windowToken, 0)
}