Как полноэкранные DrawerLayouts влияют на добавление фрагментов в backstack при установке окна SystemUiVisibility в SYSTEM_UI_FLAG_LIGHT_STATUS_BAR?

Попробуйте

using (Image image = Image.FromFile(Path))
{
    using (MemoryStream m = new MemoryStream())
    {
        image.Save(m, image.RawFormat);
        byte[] imageBytes = m.ToArray();

        // Convert byte[] to Base64 String
        string base64String = Convert.ToBase64String(imageBytes);
        return base64String;
    }
}
1
задан luvieere 16 January 2019 в 11:12
поделиться

1 ответ

Мне не удалось воспроизвести проблему, которую вы описали, используя ваш пример проекта. Я могу показать и удалить фрагмент независимо от того, переключаю я цвет строки состояния или нет.

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

// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

// finally change the color
window.setStatusBarColor(ContextCompat.getColor(activity,R.color.my_statusbar_color));

Как ни странно, я смог воспроизвести проблему, которую вы описали после попытки кода выше, что делает его еще более запутанным.

Поэтому я рекомендую альтернативный подход - использовать CoordinatorLayout вместо окна для рисования цвета строки состояния. Сделайте CoordinatorLayout прямым потомком DrawerLayout и добавьте к нему android:fitsSystemWindows="true". Тогда вместо того, чтобы звонить window.setStatusBarColor(), звоните coordinatorLayout.setStatusBarBackgroundColor(). Это решение не требует каких-либо специальных оконных флагов, но обратите внимание, что для того, чтобы это работало, вам также необходимо добавить следующую строку в тему:

<item name="android:statusBarColor">@android:color/transparent</item>

Я также использую CoordinatorLayout в большом проекте для динамического изменив цвет строки состояния, так что, надеюсь, она подойдет и вам. Это определенно работает в примере проекта.

0
ответ дан Ovidiu 16 January 2019 в 11:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: