Android状态栏与工具栏

时间:2016-06-06 07:13:01

标签: android android-layout

我正在运行一个Android项目。我的 activity_main 布局中的工具栏和状态栏都是绿色的。如果我将工具栏颜色更改为其他颜色,状态栏也将更改为新颜色。

我有 activity_hotel_detail.xml 布局的活动。状态栏和工具栏颜色是我需要的不同颜色。

为什么工具栏的相同配置会使状态栏的颜色不同?

如何使main_activity布局与我的activity_hotel_detail布局相同?

我是android新手,感谢任何帮助!

enter image description here

enter image description here activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".ViewController.MainActivity">

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

</RelativeLayout>

activity_hotel_detail.xml

    <android.support.v7.widget.Toolbar
        android:id="@+id/my_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/Blue"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
        style="@style/ThemeOverlay.AppCompat.Light"/>

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:fresco="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        android:fillViewport="true"
        android:background="@color/cell">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:background="@color/white"
                android:padding="0dp"
                android:stretchColumns="1">
                    <com.facebook.drawee.view.SimpleDraweeView
                        android:layout_width="match_parent"
                        android:layout_height="200dp"
                        android:contentDescription="@string/img_description"
                        fresco:placeholderImage="@drawable/test_image"
                        fresco:actualImageScaleType="fitStart"
                        android:id="@+id/hotel_image_view" />
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="New Text"
                        android:id="@+id/hotel_name"/>
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="200dp"
                        android:text="New Text New Text New Text New TextNew TextNew TextNew TextNew TextNew TextNew TextNew TextNew TextNew TextNew Text"
                        android:id="@+id/hotel_description"/>
                <fragment
                    class="com.example.william.willhotel.ViewController.HotelDetailFragment"
                    android:layout_width="match_parent"
                    android:layout_height="30dp"
                    android:id="@+id/fragement">
                    </fragment>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="back"
                    android:background="@color/BlueViolet"
                    android:id="@+id/back_button" />
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="next"
                    android:background="@color/DarkRed"
                    android:id="@+id/next_button" />

            </LinearLayout>
    </ScrollView>

编辑:styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/DarkRed</item>
        <item name="colorPrimaryDark">@color/IndianRed</item>
        <item name="colorAccent">@color/yellow</item>
    </style>

    <style name="AppTheme.NoActionBar">
        <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" />

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

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

</resources>

styles.xml(V21)

<resources>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
</resources>

EDIT2 在styles.xml(v21)中用@ color / IndianRed替换&lt; transparent1并不起作用。

<resources>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@color/IndianRed</item>
    </style>
</resources>

修改

我的活动从AppCompatActivity延伸,我看到源代码只有大于23的sdk版本才能获得系统主题。

public class MainActivity extends AppCompatActivity

因此,如果我在sdk 23下运行,则状态栏显示正常。

if (delegate.applyDayNight() && mThemeId != 0) {
            // If DayNight has been applied, we need to re-apply the theme for
            // the changes to take effect. On API 23+, we should bypass
            // setTheme(), which will no-op if the theme ID is identical to the
            // current theme ID.
            if (Build.VERSION.SDK_INT >= 23) {
                onApplyThemeResource(getTheme(), mThemeId, false);
            } else {
                setTheme(mThemeId);
            }
        }

3 个答案:

答案 0 :(得分:3)

在您的活动的onCreate()方法

中使用以下代码
  if (Build.VERSION.SDK_INT >= 21) {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.primary_dark));
        }

其中primary_dark颜色是工具栏的颜色

答案 1 :(得分:0)

  

values-v21/styles.xml

中添加此内容
<item name="android:statusBarColor">@color/IndianRed</item>
  

您的主题应如下所示删除Transparent

   <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@color/IndianRed</item>
    </style>

答案 2 :(得分:0)

这可能会对您有所帮助

 <resources>
 <!-- inherit from the material theme -->
 <style name="AppTheme" parent="android:Theme.Material">
<!-- Main theme colors -->
<!--   your app branding color for the app bar -->
<item name="android:colorPrimary">@color/primary</item>
<!--   darker variant for the status bar and contextual app bars -->
<item name="android:colorPrimaryDark">@color/primary_dark</item>
<!--   theme UI controls like checkboxes and text fields -->
<item name="android:colorAccent">@color/accent</item>

   参考:https://developer.android.com/training/material/theme.html#StatusBar

注意:根据谷歌文档“工具栏使用500版本的靛蓝,而状态栏使用700版本。” Doc Link:https://www.google.com/design/spec/style/color.html#color-color-schemes