Изменить цвет текста в строке состояния, когда primaryDark белый

87

Я пытаюсь воспроизвести поведение приложения Google Calendar: введите описание изображения здесь

но я не нашел способа изменить цвет текста статуса. Если я установил colorPrimaryDark как белый, я не вижу ни значков, ни текста строки состояния, потому что их цвет тоже белый.

Есть ли способ изменить цвет текста строки состояния?

заранее спасибо

MarcForn
источник

Ответы:

174

Я не уверен, на какой уровень API вы пытаетесь настроить таргетинг, но если вы можете использовать специфические для API 23 вещи, вы можете добавить в свой AppTheme styles.xml следующее:

<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowLightStatusBar">true</item>

когда android:windowLightStatusBarустановлено значение true, цвет текста строки состояния можно будет увидеть, когда цвет строки состояния белый, и наоборот, когда android:windowLightStatusBarустановлено значение false, цвет текста строки состояния будет разработан таким образом, чтобы его можно было увидеть, когда цвет строки состояния темно.

Пример:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <!-- Status bar stuff. -->
    <item name="android:statusBarColor">@color/colorPrimaryDark</item>
    <item name="android:windowLightStatusBar">true</item> 
</style>
Джон
источник
38
если у меня уровень API 21, он не работает, можете ли вы сказать мне альтернативу для этого
saikrupa
8
Любое решение найдено для Api 21. Пожалуйста, помогите?
iMDroid
1
Примечание: android: windowLightStatusBar требует уровня API 23 (текущий мин. 21) подробнее ... (⌘F1)
Hardik Darji
Для api 21 это невозможно. В приложениях Google это черная полоса, а не белая.
Джорис,
1
См. Этот пост для уровня API <23: stackoverflow.com/questions/49254877/…
Basti Vagabond
30

вы можете сделать это программно, как этот ответ

просто добавь это

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
MG
источник
14

это очень просто:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//  set status text dark
getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this,R.color.white));// set status background white

наоборот:

getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this, R.color.black));
View decorView = getWindow().getDecorView(); //set status background black 
decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); //set status text  light
Василий Г
источник
4

Как и в предыдущем случае, SYSTEM_UI_FLAG_LIGHT_STATUS_BAR выполняет работу в моем случае, не забудьте установить значение выше, чем API 22.

добавьте это в oncreate после setContentView:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
Махер
источник
1
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//  set status text dark

getWindow().setStatusBarColor(ContextCompat.getColor(MainActivity.this,R.color.colorPrimaryDark));// set status background white

Меня устраивает

Мудассар
источник
Для этого требуется уровень API 23+.
кандзи
0

Попробуйте один раз.

В свой onCreate()метод действия вставьте следующий код.

try {
        if (android.os.Build.VERSION.SDK_INT >= 21) {
                Window window = getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(ContextCompat.getColor(this, R.color.color_red));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

Примечание: color_red - цвет строки состояния.

Сурендар D
источник
2
Вопрос в цвете текста строки состояния, а не в фоне строки состояния.
кандзи
0

В onCreate()методе действия вставьте следующий код послеsetContentView(R.layout.activity_generic_main);

Вот пример кода ниже.

public class GenericMain extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_generic_main);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

    }
}
Аднан
источник
0

Попробуйте это, если не заставка

getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getActivity().getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getActivity().getWindow().setNavigationBarColor(ContextCompat.getColor(context, R.color.white));
getActivity().getWindow().setStatusBarColor(ContextCompat.getColor(context, R.color.white));
user5071155
источник