更改状态栏的颜色与程序兼容性ActionBarActivity更改状态栏的颜色与程序兼容性Actio

2019-05-13 04:37发布

我在一个活动我使用工具栏更改颜色Palette ,但使用5.0的设备ActionBarActivitystatus bar颜色是我的颜色colorPrimaryDark在我的活动主题,所以我有2个非常不同的颜色和它看起来并不好。

我意识到,在5.0你可以使用Window.setStatusBarColor()ActionBarActivity不具备这一点。

所以我的问题是在5.0我怎样才能更改状态栏的颜色与ActionBarActivity

Answer 1:

我不知道我理解这个问题。

我要以编程方式更改状态栏的颜色(和提供的设备具有的是Android 5.0),那么你可以使用Window.setStatusBarColor() 它不应该有所作为的活动是否源自ActivityActionBarActivity

刚刚尝试做:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(Color.BLUE);
}

只是测试了这个ActionBarActivity和它的作品好了。


注意:设置FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS标志编程方式是不是如果必要的values-v21风格文件有它已经设置,通过:

    <item name="android:windowDrawsSystemBarBackgrounds">true</item>


Answer 2:

有更改状态栏颜色的不同方式。

1)使用styles.xml。 您可以使用android:statusBarColor属性做到这一点很容易,但静态的方式。

注意:您还可以使用此属性与材料的主题。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="AppTheme.Base">
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
</resources>

2)你可以得到它动态地使用Window类的setStatusBarColor(int)方法来完成。 但请记住,这种方法只适用于API 21或更高。 所以一定要检查,或您的应用程序肯定会崩溃较低的设备。

下面是该方法的工作示例。

if (Build.VERSION.SDK_INT >= 21) {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.setStatusBarColor(getResources().getColor(R.color.primaryDark));
}

其中primaryDark是原色,我使用我的应用程序的700色调。 您可以定义这个颜色在colors.xml文件。

不要给它一个尝试,让我知道,如果你有任何问题。 希望能帮助到你。



Answer 3:

我不认为在状态栏颜色已经在程序兼容性得到落实呢。 这些都是可用的属性:

    <!-- ============= -->
    <!-- Color palette -->
    <!-- ============= -->

    <!-- The primary branding color for the app. By default, this is the color applied to the
         action bar background. -->
    <attr name="colorPrimary" format="color" />

    <!-- Dark variant of the primary branding color. By default, this is the color applied to
         the status bar (via statusBarColor) and navigation bar (via navigationBarColor). -->
    <attr name="colorPrimaryDark" format="color" />

    <!-- Bright complement to the primary branding color. By default, this is the color applied
         to framework controls (via colorControlActivated). -->
    <attr name="colorAccent" format="color" />

    <!-- The color applied to framework controls in their normal state. -->
    <attr name="colorControlNormal" format="color" />

    <!-- The color applied to framework controls in their activated (ex. checked) state. -->
    <attr name="colorControlActivated" format="color" />

    <!-- The color applied to framework control highlights (ex. ripples, list selectors). -->
    <attr name="colorControlHighlight" format="color" />

    <!-- The color applied to framework buttons in their normal state. -->
    <attr name="colorButtonNormal" format="color" />

    <!-- The color applied to framework switch thumbs in their normal state. -->
    <attr name="colorSwitchThumbNormal" format="color" />

(由\ SDK \演员\机器人\ SUPPORT \ V7 \程序兼容性\水库\值\ attrs.xml)



Answer 4:

试试这个,我用这个和它的作品非常好,V21。

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimaryDark">@color/blue</item>
</style>


Answer 5:

谢谢上面的答案,与那些的帮助,xamarin.android MVVMCross应用,下面起了一些R&d后

标志在方法活动指定的OnCreate

protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        this.Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
    }

对于每个MvxActivity,主题被提及作为下面

 [Activity(
    LaunchMode = LaunchMode.SingleTop,
    ScreenOrientation = ScreenOrientation.Portrait,
    Theme = "@style/Theme.Splash",
    Name = "MyView"
    )]

我SplashStyle.xml看起来像如下

<?xml version="1.0" encoding="utf-8"?>
<resources> 
    <style name="Theme.Splash" parent="Theme.AppCompat.Light.NoActionBar">
          <item name="android:statusBarColor">@color/app_red</item>
          <item name="android:colorPrimaryDark">@color/app_red</item>
    </style>
 </resources>

我有V7 appcompact简称。



Answer 6:

应用

    <item name="android:statusBarColor">@color/color_primary_dark</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>

Theme.AppCompat.Light.DarkActionBar并没有为我工作。 什么做的伎俩是,让colorPrimaryDark像往常一样随着android:colorPrimary在styles.xml

<item name="android:colorAccent">@color/color_primary</item>
<item name="android:colorPrimary">@color/color_primary</item>
<item name="android:colorPrimaryDark">@color/color_primary_dark</item>

在设置

if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                {
                    Window window = this.Window;
                    Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
                }

没有必须设置在状态栏的代码颜色。



文章来源: Change status bar color with AppCompat ActionBarActivity