4

对于我正在构建的应用程序,我使用了Design Support Library。我创建了一个使用TabLayout. 该应用程序的一个小功能是,当用户更改选项卡时,两者的颜色都会TabLayout更改Toolbar为相应的颜色。我们还使用新的NavigationView, 向用户展示 Material design DrawerLayout

但是,改变 theTabLayout和 the的颜色Toolbar完全没有问题,我们在下面的几行中进行;

String hexColor = String.format("#%06X", (0xFFFFFF & getResources().getColor(R.color.primaryColor)));
getBaseActivity().getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor(hexColor)));
mTabLayout.setBackgroundColor(getResources().getColor(primaryColor));

这一切都很好,并且按预期工作。当我尝试设置Status bar背景时出现问题。由于材料设计规范告诉我们NavigationDrawer应该进行一些特殊处理,下图显示状态栏实际上是一种半透明形式。导航抽屉落在我的主要片段上,而导航栏在两者之上,是一个半透明的栏。

它应该是什么样子

我的第一个想法是它只是一个带有 #7000 十六进制值或其他值的条形图,但事实并非如此。这样做不会改变它应该“变暗”的实际颜色的颜色。

之后,我只是尝试将所需颜色的较暗版本设置为状态栏的背景,如下所示;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getBaseActivity().getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(getResources().getColor(R.color.primaryColor));
}

但是在这样做之后,完整的功能就会中断。我的视图将如下所示:

在此处输入图像描述

本质上,我能做些什么来解决这种行为?我真的很想改变它,以便半透明功能仍然可以根据材料设计规范做它需要做的事情,但也改变了status bar背景颜色。

4

2 回答 2

0

我认为它背后总是有一个半透明的阴影,你无法将它移除。因此,您可以尝试使用颜色 alpha 通道来获得可接受的结果,或者考虑这样的解决方法:据我所知,您只是希望在导航抽屉打开时状态栏颜色略有不同,对? 那么为什么不在ViewNavigationDrawer 布局中添加一个具有所需颜色和与状态栏相同高度的空白来达到相同的效果呢?

顺便说一句,有一个R.dimen.status_bar_height高度规范。

于 2015-07-13T15:55:14.743 回答
0

活动布局

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<include layout="@layout/drawerlayout_main" />

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:menu="@menu/drawer_menu" />

</android.support.v4.widget.DrawerLayout>

Activity主题,设置statusBarColor为透明

<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>
</resources>

NavigationView 扩展了 ScrimInsetsFrameLayout,它会在状态栏位置绘制一些颜色

在此处输入图像描述

于 2016-04-18T08:07:08.530 回答