Как изменить цвет фона строки состояния 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
надеюсь, что это помогло