Почему мой диалоговый фрагмент не отображался в полноэкранном режиме в Android 11?

#android #android-layout #android-dialogfragment

#Android #android-layout #android-dialogfragment

Вопрос:

это сводит меня с ума, поэтому надеюсь, что кто-нибудь сможет помочь.

У меня есть диалоговый фрагмент, который я использую для выбора из списка. У меня это в полноэкранном режиме, и он всегда работал до 11 / API 30. Однако теперь в 11 он начал появляться с классическим видом «не в полноэкранном режиме», где вы можете видеть макет за ним со всех четырех сторон.

Я снова заставил его работать, переопределив метод onCreateDialog, см. Ниже. В этом методе я в основном дублирую вызовы, которые я уже выполняю в OnStart(), как вы можете видеть ниже…

Мой вопрос в том, ПОЧЕМУ Я ДОЛЖЕН БЫЛ ЭТО СДЕЛАТЬ? Он отлично работал до версии 11/30, и я не нашел никакой документации, в которой упоминались бы какие-либо изменения, связанные с этим в 11.

Было бы здорово, если бы кто-то более осведомленный, чем я, мог помочь мне понять.

новый метод, который я должен был добавить:

 @Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    final Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    return dialog;
}
  

мой запуск, из-за которого окно выглядело нормально до 11:

 public void onStart() {
    super.onStart();
    Window window = getDialog() != null ? getDialog().getWindow() : null;
    if (window != null) {
        if (windowAnimStyle > 0) {
            window.getAttributes().windowAnimations = windowAnimStyle;
            }
            window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR);
            window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);

            window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        }
    }
  

Ответ №1:

это работает для меня на sdk 30

 <style name="FullScreenDialogStyle">
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>
  

переопределите onCreate в вашем подклассе DialogFragment

 override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setStyle(STYLE_NO_TITLE, R.style.FullScreenDialogStyle)
}