Android 状态栏颜色不随根元素的相对布局而改变

Android 状态栏颜色不随根元素的相对布局而改变,android,android-layout,material-design,Android,Android Layout,Material Design,我刚刚开始学习android,我正在学习添加AppBar。但是如果我使用相对布局作为根,那么状态栏就不要使用主题中定义的颜色“colorPrimaryDark”。但是将布局更改为协调布局可以使其正常工作 有人能解释一下区别吗?是否要求使用坐标布局 活动扩展了AppCompative活动 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/

我刚刚开始学习android,我正在学习添加AppBar。但是如果我使用相对布局作为根,那么状态栏就不要使用主题中定义的颜色“colorPrimaryDark”。但是将布局更改为协调布局可以使其正常工作

有人能解释一下区别吗?是否要求使用坐标布局

活动扩展了AppCompative活动

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="com.example.ankit.designdemo.MainActivity">


    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        app:theme="@style/ThemeOverlay.AppCompat.Dark">

    </android.support.v7.widget.Toolbar>
</RelativeLayout>



@颜色/原色
@颜色/原色暗
@颜色/颜色重音
假的
真的
公共类MainActivity扩展了AppCompatActivity{
私人抽屉布局mDrawerLayout;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_活动);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
ActionBar ActionBar=getSupportActionBar();
actionBar.setHomeAsUpIndicator(R.drawable.ic_菜单);
actionBar.setDisplayHomeAsUpEnabled(true);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(右菜单菜单菜单主菜单);
返回true;
}
}

状态栏的样式由

android:fitsSystemWindows
标签。RelativeLayout当前不支持此操作。要么你尝试另一种布局,比如FrameLayout,它可以工作,但我建议你坚持使用坐标布局

也许您可以在这里了解更多详细信息:

v21/styles.xml
中,您可能有以下代码行:

  <item name="android:statusBarColor">@android:color/transparent</item>
@android:color/transparent
当您在
API23
上运行时,声明的样式将被
v21/styles.xml
中的样式覆盖

作为解决方案:

只需删除该行,它就会正常工作

只需添加该行即可

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

你能在你定义的
colorPrimaryDark
的地方显示样式吗?@hrskrs添加到问题中。你确定你的样式页面在
values-v21
上吗?首先,你不需要
协调布局来使用
工具栏。状态栏应该用你的
colorPrimaryDark
开箱即用的颜色,因为你继承了
AppCompatActivity
,所以我无法重现你的问题。你的代码中有任何操作吗?@Alex.F,我刚刚创建了一个带有滚动活动的新android项目,除main_activity.xml文件外,未涉及任何代码。。它使用坐标布局自动创建,工作正常。。因为我指的是一些教程,所以使用了相对布局。。就这样。。没有其他改变。现在,我的问题解决了,我正在学习,你能补充一下关于覆盖的说明吗。。我的印象是v21/styles.xml将只在API 23上使用。。还有,为什么事情会与CoordinatorLayout一起工作,这将是一个很好的补充well@Ankit关于样式,您可以阅读它们如何基于平台工作。关于
CoordinatorLayout
:它之所以有效是因为
android:fitsSystemWindows=“true”
,如果您删除它,它将显示相同的行为。我现在明白了。。因此,v21/styles.xml将在API 21或更高版本时运行。。感谢您的帮助。@Ankit yeap,声明的样式将取自
v21/styles.xml
,未声明但在
styles.xml
上声明的样式将取自
styles.xml
  <item name="android:statusBarColor">@android:color/transparent</item>
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);