Как изменить цвет фона строки состояния Android - PullRequest
18 голосов
/ 28 января 2012

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

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

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

enter image description here

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

enter image description here

Ответы [ 4 ]

13 голосов
/ 28 января 2012

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

Это потребует огромного труда.

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

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

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

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


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

12 голосов
/ 30 апреля 2014

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

Если вы хотите использовать его в приложении (как вы и просили), вы можете использовать эту библиотеку 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);
7 голосов
/ 24 мая 2016

В файле 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));`
1 голос
/ 15 июня 2015

ЕСЛИ вы хотите обновить цвет строки состояния на 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...