Я наблюдаю странное поведение в моем приложении, когда экранная клавиатура задерживается на экране после отклонения DialogFragment
, скрывая пользовательский интерфейс действия, несмотря на то, что для действия android:windowSoftInputMode
установлено значение adjustResize
в мой манифест.
Вот что у меня есть:
- Активность
AppCompatActivity
- Корневым элементом действия является
CoordinatorLayout
, который содержит ScrollView
с атрибутом android:isScrollContainer="true"
- В моем файле манифеста это действие имеет атрибут
android:windowSoftInputMode="adjustResize"
- В упражнении есть кнопки, которые вызывают показ
android.support.v4.app.DialogFragment
, который содержит элемент AutoCompleteTextView
.
- Клавиатура сама по себе не отображается, когда появляется мое диалоговое окно с
AutoCompleteTextView
, поэтому я обхожу ее, явно показывая клавиатуру в диалоговом окне и скрывая ее перед закрытием диалога.
Моя проблема в том, что скрытие клавиатуры не работает должным образом: после закрытия диалогового окна клавиатура остается, пользовательский интерфейс действия не изменяется, поэтому клавиатура и кнопка навигации «Назад» скрываются. указывает влево, а не вниз, как будто он думал, что клавиатура не отображается Кроме того, последующее нажатие на любые текстовые поля в моем действии приводит к тому, что клавиатура исчезает, как будто клавиатура поняла, что ее там не должно было быть. Когда я комментирую вызов dismiss()
и закрываю диалоговое окно, щелкая где-либо за его пределами, я вижу, что клавиатура правильно отключается и все работает как положено.
Соответствующий код для моего определения класса DialogFragment выглядит следующим образом:
class DualSelectionDialogFragment : DialogFragment() {
private var input: AutoCompleteTextView? = null
[...]
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
[...]
val builder = AlertDialog.Builder(context!!)
val content = activity?.layoutInflater?.inflate(R.layout.select_dual_mode, null)
[...]
input = content?.findViewById<AutoCompleteTextView>(R.id.dual_autocomplete_input)?.apply {
setAdapter(ArrayAdapter(context, android.R.layout.simple_list_item_1, [...]))
setOnItemClickListener { _, view, _, _ ->
[...]
hideKeyboard(context, this)
dismiss()
}
}
[...]
builder.setView(content).setCustomTitle(title)
return builder.create()
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
dialog.window.setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE +
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
}
[...]
fun hideKeyboard(context: Context, view: View) {
(context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager).hideSoftInputFromWindow(view.windowToken, 0)
}
}
Я что-то здесь не так делаю?