当primaryDark为白色时更改状态栏文本颜色


87

我正在尝试重现Google日历应用程序的行为: 在此处输入图片说明

但是我还没有找到改变状态文本颜色的方法。如果我将colorPrimaryDark设置为白色,则状态栏也不会显示图标,因为它们的颜色也是白色。

有什么方法可以更改状态栏文本的颜色?

提前致谢

Answers:


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 '19

对于api 21,这是不可能的。在Google应用程序中,它是黑色的条,而不是白色的条。
Joris

1
看到这个帖子的API等级<23:stackoverflow.com/questions/49254877/...
巴斯蒂流浪汉

30

您可以像这个答案一样以编程方式进行操作

只需添加此

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

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。

在setContentView之后将其添加到oncreate:

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-状态栏颜色。


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));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.