Какой правильный подход для создания или изменения цвета строки состояния? - PullRequest
0 голосов
/ 12 февраля 2020

У меня тихая большая проблема с изменением цвета моей строки состояния. Устройство, на котором я работаю, говорит мне android 5.1, но такой персонал, как windowTranslucentStatus или android:colorPrimaryDark или android:statusBarColor, просто не работает вообще (полупрозрачный, например, 20% прозрачности), а все остальное не работает.

, поэтому кажется, что это что-то под android 5.0.

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

, поэтому я сделал кнопку с моим цветом перед строкой состояния но теперь мне нужно добавить туда все иконки. (мне нужен только Wi-Fi, Bluetooth, батарея, время.) это все, но я нашел это довольно сложно.

так что теперь я немного застрял, кто-нибудь знает взломать, как изменить этот цвет или как-то как-то дублировать значки уведомлений? Мне не нужно скользить панель уведомлений, мне просто нужно, чтобы это было видно.

Ответы [ 4 ]

1 голос
/ 12 февраля 2020

Вы можете установить его в androidMenifest.xml в деятельности или теме приложения, например,

<activity
     android:theme="@style/activityTheme"
     android:name=".MyActivity"
     android:screenOrientation="portrait" />

в style.xml

<style name="activityTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

colorPrimaryDark - это цвет строки состояния для действия

если вы хотите изменить его программно, вы можете использовать приведенный ниже код

для действия

Kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     window.statusBarColor = ContextCompat.getColor(this, R.color.YOUR_COLOR)
}

Java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.COLOR));
}

для фрагмента

Kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     activity.window.statusBarColor = ContextCompat.getColor(this, R.color.YOUR_COLOR)
}

Java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     getActivity().getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.COLOR));
}
0 голосов
/ 13 февраля 2020

Итак, последнее, что да, это работает, это только один код, который не оставляет тени в строке состояния ... не знаю почему, но да, это было решением для меня ... я сделал в стилях мой фон красным ... и на всех экранах (макетах) я добавляю за всем макет от края до края ... поэтому мой фон теперь является этим макетом ... и реальный фон - только для строки состояния ...

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

большое спасибо @Muhammad Muzammil Sharif без него, я никогда не доберусь до этого ... (3 человека в моей компании пытались сделать это целую неделю)

это последняя версия ... теперь я хотел бы скрыть некоторые системные уведомления ... но я не думаю, что это возможно бле ... еще раз спасибо всем enter image description here

enter image description here

enter image description here

, поэтому во всех ваших java действиях вам нужно это:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }

и в ваших стилях. xml вам нужно установить цвет фона (этот цвет будет вашим цветом строки состояния):

<style name="AppCompat" parent="Theme.AppCompat">
    <item name="android:colorBackground">@color/YOUR_STATUS_BAR_COLOR</item>
</style>

и на всех ваших макетах вам нужно добавить макет, который будет вашим фоном:

<LinearLayout
    android:background="@color/YOUR_BACKGROUND_COLOR"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="bottom"
    />

конечно, если вы хотите использовать @ color / just name ... you нужно установить это в цветах. xml:

<color name="YOUR_STATUS_BAR_COLOR">#cf031c</color>
<color name="YOUR_BACKGROUND_COLOR">#383838</color>
0 голосов
/ 12 февраля 2020

ммм это можно изменить ... mab ie, потому что Theme.AppCompat темный и Theme.AppCompat.Light.DarkActionBar светлый

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/color_red_real</item>
    <item name="colorPrimaryDark">@color/color_red_real</item>
    <item name="colorAccent">@color/color_red_real</item>
</style>[![enter image description here][1]][1]

enter image description here

<style name="AppTheme" parent="Theme.AppCompat">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/color_red_real</item>
    <item name="colorPrimaryDark">@color/color_red_real</item>
    <item name="colorAccent">@color/color_red_real</item>
</style>

enter image description here

0 голосов
/ 12 февраля 2020

манифест

<application android:name="com.smartpos.pocket.app.PocketApplication" android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:allowBackup="true" android:theme="@style/AppTheme">
    <activity android:name="com.smartpos.pocket.activity.impl.StartUpActivity" android:theme="@style/AppTheme">

стилей (у меня есть проект на API 17)

<style name="AppTheme" parent="AppCompat">
</style>

стилей v21

<style name="AppCompat" parent="Theme.AppCompat">
        <item name="colorAccent">@color/color_red_real</item>
        <item name="android:windowAnimationStyle">@null</item>
        <item name="colorPrimary">@color/color_red_real</item>
        <item name="colorPrimaryDark">@color/color_red_real</item>
</style>

строка состояния ничего не меняет, я думаю, что устройство является слоем, и нет android 5.1 или я не знаю ...

enter image description here

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