Android 如何使状态栏变为白色并带有黑色图标?

Android 如何使状态栏变为白色并带有黑色图标?,android,themes,Android,Themes,我想更改我的应用程序状态栏的颜色,使其为带黑色图标的白色(而不是默认的带白色图标的黑色)。有什么方法可以做到这一点吗?除非您可以控制整个rom来手动定制,否则没有这种方法。我建议你做的是,在你的主题中使用浅灰色作为状态栏的颜色,就像谷歌硬盘一样 编辑:请参考@Wrekcker answer,因为这在android M中发生了更改。使用android M(api级别23),您可以使用android:windowLightStatusBar属性从主题中实现这一点 编辑: 正如Pdroid所提到的,这

我想更改我的应用程序状态栏的颜色,使其为带黑色图标的白色(而不是默认的带白色图标的黑色)。有什么方法可以做到这一点吗?

除非您可以控制整个rom来手动定制,否则没有这种方法。我建议你做的是,在你的主题中使用浅灰色作为状态栏的颜色,就像谷歌硬盘一样

编辑:请参考@Wrekcker answer,因为这在android M中发生了更改。

使用android M(api级别23),您可以使用
android:windowLightStatusBar
属性从主题中实现这一点

编辑:

正如Pdroid所提到的,这也可以通过编程实现:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); 
我也有同样的问题

我注意到当我使用像RelativeLayout这样的普通布局时,它不起作用。但当我从CordinatorLayout这样的支持库中切换到该功能时,它终于开始工作了。试试这个

  <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context=".Activities.Activity">


        <android.support.v7.widget.Toolbar
            android:id="@+id/tb_activity"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />


    </android.support.design.widget.CoordinatorLayout>

风格

<resources>
<!-- 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>
</style>

<style name="AppTheme.NoActionBar" parent="AppTheme">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

@颜色/原色
@颜色/原色暗
@颜色/颜色重音
假的
真的

在舱单上

<activity
            android:name=".Activities.MyActivity"
            android:label="Activity"
            android:theme="@style/AppTheme.NoActionBar">
        </activity>

可以将白色状态栏设置为灰色图标,例如SDK>=23(请参阅):


刚刚添加到我在Kotlin的活动中:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                window.decorView.systemUiVisibility =View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
                window.statusBarColor = Color.WHITE
            }

只需将此添加到您的样式中

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
true
@android:彩色/透明
将android:windowDrawsSystemBarBackgrounds设置为true*。 这是一个标志,其说明如下:


指示此窗口是否负责绘制系统栏背景的标志。如果为true且窗口不浮动,则系统栏以透明背景绘制,此窗口中的相应区域将填充{@link android.R.attr#statusBarColor}和{@link android.R.attr#navigationBarColor}中指定的颜色。对应于{@link android.view.WindowManager.LayoutParams#FLAG#DRAWS(系统)BAR(背景)。

您可以在Kotlin中以这种方式使用它

 window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
确保在
setContentView()之前在
onCreate()
中调用它

  • 在样式中设置父项
  • 用xml将其添加到菜单栏

  • 这就是我的工作

    <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowLightStatusBar">true</item>
        <item name="android:statusBarColor">@android:color/white</item>
    </style>
    
    
    真的
    @android:彩色/白色
    
    我是通过以下方式实现的:

      if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
            setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, true);
        }
        if (Build.VERSION.SDK_INT >= 19) {
            setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false);     }
    
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
            getWindow().setStatusBarColor(Color.WHITE);
        }
    
    
    
    setContentView(R.layout.activity_mainss);
    
    if(Build.VERSION.SDK\u INT>=19&&Build.VERSION.SDK\u INT<21){
    setWindowFlag(这是WindowManager.LayoutParams.FLAG_半透明_状态,true);
    }
    如果(Build.VERSION.SDK_INT>=19){
    setWindowFlag(此,WindowManager.LayoutParams.FLAG_半透明_状态,false);}
    如果(Build.VERSION.SDK_INT>=21){
    getWindow();
    getWindow().setStatusBarColor(Color.WHITE);
    }
    setContentView(R.layout.activity\u mains);
    
    主题在AndroidManifest中设置:

     <style name="Theme.MapRiti" parent="Theme.AppCompat.DayNight.DarkActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryDark">@color/orange</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
    </style>
    
    
    @颜色/紫色500
    @颜色/橙色
    @颜色/紫色\u 700
    @颜色/青色200
    @颜色/青绿色700
    
    更改默认主题我应该将其更改为什么主题才能将通知栏图标更改为黑色?使用自定义主题。首先,看看那些遵循安卓指南并带有白色通知图标的应用程序,当它们在你的应用程序中时,你希望用户如何看到它们?但是你不能更改其他应用程序资源的颜色,事实上,棒棒糖会让所有图标都变白,不管我用什么方式设置它?@busylee我想你可以创建一个主题的子元素,然后在那里更改它,然后用activity.getTheme.setTo(主题另一个)Hi@Cracker我对我的应用程序通知图标也有同样的问题。我在我的主题中添加了android:windowLightStatusBar=true,我正在android M中测试它。但是当我使用第三方启动器应用程序(Nova启动器)更改主题时,白色通知图标不会变为灰色。我已经尝试了所有可能的方法,但还没能解决它。如果您能帮助我,我们将不胜感激。@busylee是的,您可以随时使用以下方法进行设置:View.SetSystemMivibility(View.SYSTEM\u UI\u FLAG\u LIGHT\u STATUS\u BAR);它应该被添加到回答中如果我想在22或以前的版本中使用呢?Android M支持它
      app:theme="@style/AppThemeWithoutActionBarwithwhitehed"       
      android:background="#fff"
    
    <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowLightStatusBar">true</item>
        <item name="android:statusBarColor">@android:color/white</item>
    </style>
    
      if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
            setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, true);
        }
        if (Build.VERSION.SDK_INT >= 19) {
            setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false);     }
    
        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
            getWindow().setStatusBarColor(Color.WHITE);
        }
    
    
    
    setContentView(R.layout.activity_mainss);
    
     <style name="Theme.MapRiti" parent="Theme.AppCompat.DayNight.DarkActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryDark">@color/orange</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
    </style>