Как изменить цвет фона строки состояния Android

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

Если кто-то знает об этом, пожалуйста, помогите мне.

Строка состояния по умолчанию

enter image description here

После использования выделенного фона в строке состояния

enter image description here

Ответ 1

К сожалению, если вы не создаете пользовательское ПЗУ, это невозможно, если только вы не хотите, чтобы строка состояния изменялась для вашего приложения.

Это потребует огромного количества работы.

Сначала вам нужно добавить Theme.NoTitleBar.Fullscreen в манифест.

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" 
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        >

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

Если вы действительно хотите сделать это, вам будет нелегко.


Извините, если у вас нет знаний о том, как создавать собственные ПЗУ, я не думаю, что это возможно

Ответ 2

Это возможно на Киткате и после.

Если вы хотите использовать его в приложении (например, вы спросили), вы можете использовать эту библиотеку https://github.com/jgilfelt/SystemBarTint

Вам нужно только написать:

// set a custom tint color for all system bars
tintManager.setTintColor(Color.parseColor("#99000FF"));   
// set a custom navigation bar resource
tintManager.setNavigationBarTintResource(R.drawable.my_tint);
// set a custom status bar drawable
tintManager.setStatusBarTintDrawable(MyDrawable);

Ответ 3

В styles.xml сделайте это:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
         <!---Below is the code for status bar color------>
        <item name="android:statusBarColor">@color/color_primary</item>
    </style>
</resources>

Поместите его в файл values-v21/styles.xml, чтобы включить его в Lollipop и более поздних версиях.

Для того, чтобы сделать это программно, вы можете сделать это:

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(activity.getResources().getColor(R.color.example_color));

Ответ 4

IF вы хотите обновить цвет строки состояния на Lollipop без обновления вашего ADT и SDK и всего этого связанного материала, вы можете использовать отражения для достижения методов API 21 (Lollipop) и выше

в вашей деятельности:

    if (Build.VERSION.SDK_INT >= 21) {
        Window window = getWindow();

        // original code, works on Lollipop SDKs
        // window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        // window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        // window.setStatusBarColor(getResources().getColor(YOUR_COLOR));

        try {
            // to work on old SDKs 
            int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = 0x80000000;
            window.addFlags(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

            Class<?> cls = window.getClass();
            Method method = cls.getDeclaredMethod("setStatusBarColor",
                    new Class<?>[] { Integer.TYPE });

            method.invoke(window, Res.color(theme.statusColor));

        } catch (Exception e) {
            // upgrade your SDK and ADT :D
        }

    }

мой текущий минимальный API равен 15, если вы не можете найти

WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS

в вашем SDK, вы можете получить это значение из документации, как то, что я сделал с

WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

надеюсь, что это помогло