строка состояния меняет свой цвет на черный внутри фрагмента полноэкранного диалога android

Я использую фрагмент диалога. Проблема в том, что цвет строки состояния изменился на черный. Как изменить его на другой цвет? Странная причина внутри фрагмента, активность работает нормально. Только черный внутри DialogFragment

        @Override
            public void onStart() {
                super.onStart();    //super.onStart() is where dialog.show() is actually called on the underlying dialog, so we have to do it after this point
                Dialog d = getDialog();
                if (d != null) {

                    int width = ViewGroup.LayoutParams.MATCH_PARENT;
                    int height = ViewGroup.LayoutParams.MATCH_PARENT;
                    d.getWindow().setLayout(width, height);
                    d.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

                }
            }
     @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            final Dialog dialog = new Dialog(getActivity(), R.style.full_screen_dialog);
            return dialog;

}

person Jenya Kirmiza    schedule 04.01.2017    source источник


Ответы (6)


Я только что разместил решение этой проблемы здесь

Добавьте следующую тему в res/value-v21/style

<style name="DialogTheme" parent="@style/Base.Theme.AppCompat.Light.Dialog">
     <item name="android:windowTranslucentStatus">true</item>
</style>

Затем примените стиль к DialogFragment в onCreate.

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogTheme);
}
person Noman Rafique    schedule 24.01.2017
comment
минимальный требуемый SDK 19 для этого решения. - person Alp Altunel; 22.11.2017
comment
DialogTheme можно поставить в res/value-v19/style - person Deni Erdyneev; 15.08.2018
comment
Работает, но приводит к тому, что диалоговое окно под находится в строке состояния, когда вы устанавливаете lp.height = WindowManager.LayoutParams.MATCH_PARENT;, а затем getWindow().setAttributes(lp); в своем диалоговом окне. Так что не идеальное решение, к сожалению.. - person Firzen; 15.05.2019

Вы должны установить FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, чтобы указать, что это окно отвечает за отрисовку фона для системных панелей.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        dialog.getWindow().setStatusBarColor(yourColor); 
    }
person ucMedia    schedule 09.04.2018
comment
Это позволило мне установить цвет строки состояния при отображении диалогового окна, но рисует поверх прозрачности. Может быть сложно затемнить до того же уровня прозрачности, что и диалоговое окно. - person speedynomads; 08.05.2018

РЕБЯТА, ЛУЧШЕЕ РЕШЕНИЕ НАХОДИТСЯ НА ССЫЛКЕ НА ВЕБ-САЙТ, КОТОРУЮ Я РАЗМЕЩАЮ ЗДЕСЬ

https://zocada.com/android-full-screen-dialogs-using-dialogfragment/

Я также загружу код здесь для справки

1-й создайте стиль FullScreenDialogStyle в вашем файле стиля:

<style name="FullScreenDialogStyle" parent="Theme.AppCompat.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorPrimary">@color/colorPrimary</item>

    <!-- Set this to true if you want Full Screen without status bar -->
    <item name="android:windowFullscreen">false</item>

    <item name="android:windowIsFloating">false</item>

    <!-- This is important! Don't forget to set window background -->
    <item name="android:windowBackground">@color/colorWhite</item>

    <!-- Additionally if you want animations when dialog opening -->
    <!--<item name="android:windowEnterAnimation">@anim/slide_up</item>-->
    <!--<item name="android:windowExitAnimation">@anim/slide_down</item>-->
</style>

внутри вашего класса dialogFragment переопределить метод onCreate

 @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NORMAL,R.style.FullScreenDialogStyle);

    }

затем переопределите метод Onstart, с помощью которого вы можете получить доступ к getDialog() и установить высоту и ширину

@Override
public void onStart() {
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null) {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}
person Jeslin Jacob    schedule 21.11.2018

вот решение, которое я нашел:

добавьте это в свой файл style.xml

<style name="BottomSheetDialogTheme" parent="BaseBottomSheetDialog">
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

<!-- set the rounded drawable as background to your bottom sheet -->
<style name="BottomSheet" parent="@style/Widget.Design.BottomSheet.Modal">
    <item name="android:background">@color/transparent</item>
</style>

<style name="BaseBottomSheetDialog" parent="@style/Theme.Design.Light.BottomSheetDialog">
    <item name="android:windowIsFloating">false</item>
    <item name="bottomSheetStyle">@style/BottomSheet</item>
</style>

то вы должны переопределить метод onCreate() в классе BottomSheetDialogFragment и вызвать:

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setStyle(BottomSheetDialogFragment.STYLE_NORMAL, R.style.BottomSheetDialogTheme);

}
person Zaki    schedule 21.04.2020

Чтобы изменить цвет строки состояния в разделе DialogFragment, установите стиль ниже для вашего dialogFragment в методе onCreate.

нравится:

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

Добавьте этот стиль в style.xml

 <style name="FullScreenDialogWithStatusBarColorAccent">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/white</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:statusBarColor">@color/colorAccent</item>


    <!--<item name="android:windowAnimationStyle">@style/MateriDocumentAlertsActivityalDialogSheetAnimation</item>-->
</style>
person syed dastagir    schedule 02.12.2019

в котлине

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        window?.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window?.statusBarColor = Color.parseColor("#0173B7")
    }
person Sandeep Pareek    schedule 06.05.2021