Как изменить цвет фона строки состояния Android
Я хочу изменить цвет фона строки состояния, написав приложение. У моего андроид устройства черный цвет, я хочу поменять его на другой. Я видел несколько сообщений, связанных с этим здесь, но они рассказывают об истории уведомлений.
Если кто-то знает об этом, пожалуйста, помогите мне.
Строка состояния по умолчанию
After using a drawable as background to status bar
5 ответов
Извините, если вы не делаете пользовательское ПЗУ, это невозможно, если только вы не хотите, чтобы строка состояния изменялась для вашего приложения.
Это потребует чертовски много работы.
Сначала вам нужно будет добавить Theme.NoTitleBar.Fullscreen к вашему манифесту.
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
>
Затем, как только вы сделаете, что вам нужно создать стандартную раскладку, которая представляет строку состояния, это будет означать, что вам нужно добавить время, а также получать все уведомления от других приложений, я лично не знаю, как это сделать, но Я уверен, что есть способ.
Если вы действительно хотите сделать это, вам будет нелегко.
Извините, если вы не знаете, как создавать собственные ROM-диски, я не думаю, что это возможно
В 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));`
Это возможно на Киткат и после.
Если вы хотите использовать его в приложении (как вы и просили), вы можете использовать эту библиотеку 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);
styles.xml
был недавно изменен на, поэтому большинство ответов здесь устарели. Теперь вы можете просто добавить эту строку кода в
themes.xml
файл, чтобы изменить цвет строки состояния на зеленый:
<item name="android:statusBarColor">@color/black</item>
Если вы хотите обновить цвет строки состояния на 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
надеюсь, это помогло