Полноэкранный DialogFragment с softInputMode AdjustResize - PullRequest
0 голосов
/ 03 апреля 2020

Итак, у меня есть DialogFragment, который я расширяю на весь экран в onResume со следующим кодом:

    val params = dialog?.window?.attributes
    params?.width = ViewGroup.LayoutParams.MATCH_PARENT
    params?.height = ViewGroup.LayoutParams.MATCH_PARENT
    dialog?.window?.attributes = params as WindowManager.LayoutParams

Я также использую следующий стиль:

<style name="AppTheme.FullscreenDialogFragment" parent="Theme.MaterialComponents.Light.Dialog">
    <item name="android:windowIsFloating">false</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:windowBackground">@color/background1</item>
</style>

Теперь я также хочу, чтобы это расширялось под строкой состояния, и я делаю это с помощью следующего (я также установил прозрачный цвет строки состояния):

dialog?.window?.decorView?.systemUiVisibility =
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE.addFlag(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)

Это все работает совершенно нормально, но теперь я хочу настроить softInputMode настроить размер. И я просто не могу заставить его работать. Это работает только если я уберу флаги Layout выше. Работает нормально на обычных фрагментах. У кого-нибудь есть идея, что мне здесь не хватает, или это просто невозможно с DialogFragment?

1 Ответ

0 голосов
/ 08 апреля 2020

Поэтому моей проблемой был не DialogFragment, а тот факт, что Android не учитывает AdjustResize, когда вы рисуете свой макет под системными панелями. Чтобы предотвратить это, вы должны слушать вставки Window и применять их в качестве отступов к макету, чтобы при открытой клавиатуре нижняя вставка уменьшала весь ваш контент на эту величину и ScrollView можно было прокрутить до нижней части. Я использую следующую библиотеку для вставок:

https://github.com/chrisbanes/insetter

...