工具栏位于Activity和Fragment android下的状态栏下方

时间:2017-08-30 13:23:16

标签: android android-toolbar

我想在棒棒糖前和棒棒糖上面实现透明状态栏。我的cast是19.我尝试了以下方法来实现透明minimumSdkLevel。但statusbar位于toolbar之下。

以下是截图(这是一个带有工具栏的全屏碎片):

**This is a Full screen Fragment**

上述statusbar的布局:

screenshot

这是 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" app:cardCornerRadius="3dp" android:fitsSystemWindows="true" app:cardElevation="3dp"> <RelativeLayout android:id="@+id/gamesLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.AppBarLayout android:id="@+id/toolbarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/gameToolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/toolbarLayout"> <ImageView android:layout_width="200dp" android:layout_height="200dp" android:adjustViewBounds="true" android:alpha="0.3" android:scaleType="fitXY" android:src="@drawable/background_img" /> <ImageView android:layout_width="200dp" android:layout_height="200dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:adjustViewBounds="true" android:alpha="0.3" android:rotation="180" android:scaleType="fitXY" android:src="@drawable/background_img" /> <android.support.v7.widget.RecyclerView android:id="@+id/gameList" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="10dp" /> </RelativeLayout> </RelativeLayout> </android.support.v7.widget.CardView>

styles.xml

这是 <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:colorBackgroundCacheHint">@null</item> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">true</item> <item name="android:windowAnimationStyle">@android:style/Animation</item> </style>

v21/styles.xml

我甚至已将<!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="android:colorPrimary">@color/colorPrimary</item> <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item> <item name="android:colorAccent">@color/colorAccent</item> <item name="android:windowContentTransitions">true</item> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:windowTranslucentNavigation">true</item> </style> 添加到android:fitsSystemWindows="true"Activities的根布局中。

我在FragmentsActivities

中添加了以下代码
Fragments

为什么我没有透明if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window window = getWindow(); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } 以及为什么Statusbar位于Toolbar下面?

4 个答案:

答案 0 :(得分:0)

默认style.xml中的

<!-- Base application theme. -->
<style name="BGTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>

<style name="BGTheme.ActionBar.Transparent" parent="BGTheme">
    <item name="android:windowContentOverlay">@null</item>
    <item name="windowActionBarOverlay">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@android:color/transparent</item>
    <item name="android:textColorSecondary">@color/white</item>
</style>

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

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

并在你的v-21 style.xml

<style name="BGTheme.ActionBar.Transparent" parent="BGTheme">
    <item name="colorPrimary">@android:color/transparent</item>
</style>

注意:在根布局android:fitsSystemWindows="true"

中添加此内容

答案 1 :(得分:0)

删除陈述

在21岁以下无法使用
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

答案 2 :(得分:-2)

在'style.xml'

中添加流畅的线条
    <item name="android:windowContentOverlay">@null</item>
    <item name="windowActionBarOverlay">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@android:color/transparent</item>

答案 3 :(得分:-2)

修改

尝试在基本视图中使用以下行。

android:fitsSystemWindows="true"

也提到了 android:fitsSystemWindows

  

内部属性,根据系统窗口调整视图布局   作为状态栏。如果为true,则调整此视图的填充以便离开   系统窗口的空间。只有在此视图出现时才会生效   非嵌入式活动。

     

必须是布尔值,&#34; true&#34;或&#34; false&#34;。

     

这也可能是对资源的引用(在表单中)   &#34; @ [package:] type:name&#34;)或theme属性(在表单中   &#34;?[package:] [type:] name&#34;)包含此类型的值。

     

这对应于全局属性资源符号   fitsSystemWindows。

您也可以使用主题中的以下行全局使用它

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

我希望它有所帮助。它适用于我的项目。