我在Android项目上工作,我正在实现导航抽屉。我正在通读新的Material Design Spec和Material Design Checklist。
规范规定,滑出窗格应该浮动在包括状态栏在内的所有其他内容之上,并且在状态栏上是半透明的。
我的导航面板在状态栏上,但它没有任何透明度。我遵循了这篇SO帖子中的代码,就像谷歌开发人员博客上How do I use DrawerLayout to display over the ActionBar/Toolbar and under the status bar?上的链接所建议的那样。
下面的是我的XML布局
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/my_awesome_toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="@color/appPrimaryColour" />
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout"
android:layout_width="304dp"
android:layout_height="match_parent"
android:layout_gravity="left|start"
android:fitsSystemWindows="true"
android:background="#ffffff">
<ListView android:id="@+id/left_drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"></ListView>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
下面的是我的应用程序主题
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/appPrimaryColour</item>
<item name="colorPrimaryDark">@color/appPrimaryColourDark</item>
<item name="colorAccent">@color/appPrimaryColour</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">true</item>
</style>
下面的主题是我的应用程序v21
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/appPrimaryColour</item>
<item name="colorPrimaryDark">@color/appPrimaryColourDark</item>
<item name="colorAccent">@color/appPrimaryColour</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
下面的是我的onCreate方法
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
mDrawerLayout = (DrawerLayout)findViewById(R.id.my_drawer_layout);
mDrawerList = (ListView)findViewById(R.id.left_drawer);
mDrawerLayout.setStatusBarBackgroundColor(
getResources().getColor(R.color.appPrimaryColourDark));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
LinearLayout linearLayout =
(LinearLayout)findViewById(R.id.linearLayout);
linearLayout.setElevation(30);
}
下面是我的导航抽屉的屏幕截图,显示顶部不是半透明的
发布于 2014-11-14 22:27:42
您的状态栏背景是白色的,这是您的抽屉LinearLayout
的背景。为什么?您正在为您的DrawerLayout
和其中的LinearLayout
设置fitsSystemWindows="true"
。这会导致LinearLayout
在状态栏(透明的)后面展开。因此,将状态栏的抽屉部分的背景设置为白色。
如果您不希望抽屉延伸到状态栏后面(希望整个状态栏有一个半透明的背景),您可以做两件事:
1)您可以简单地从LinearLayout
中删除任何背景色,并为其中内容的背景着色。或
2)您可以从您的LinearLayout
中移除fitsSystemWindows="true"
。我认为这是一种更符合逻辑、更清晰的方法。您还可以避免在状态栏下投射阴影,因为您的导航抽屉不会扩展。
如果希望抽屉延伸到状态栏后面,并具有半透明的状态栏大小的覆盖,则可以使用ScrimInsetFrameLayout
作为抽屉内容(ListView
)的容器,并使用app:insetForeground="#4000"
设置状态栏背景。当然,您可以将#4000
更改为您想要的任何内容。别忘了把fitsSystemWindows="true"
留在这里!
或者,如果你不想覆盖你的内容并且只显示纯色,你可以将LinearLayout
的背景设置为任何你想要的。不过,别忘了单独设置内容的背景!
EDIT:你不再需要处理这些事情了。有关更轻松的导航抽屉/视图实现,请参阅Design Support Library。
发布于 2014-11-06 04:52:34
你需要做的就是在状态栏中使用一些半透明的颜色。将以下行添加到您的v21主题:
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/desired_color</item>
不要忘记,资源( color
)必须始终采用#AARRGGBB
格式。这意味着该颜色还将包含alpha值。
发布于 2014-11-11 20:27:15
为什么不使用类似的东西呢?
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#80111111"/>
</android.support.v4.widget.DrawerLayout>
上面的代码使用android:background
中的alpha资源来显示actionbar中的透明度。
正如其他答案所示,还有其他方法可以通过代码实现这一点。我上面的回答在xml布局文件中做了必要的工作,在我看来,这个文件很容易编辑。
https://stackoverflow.com/questions/26745300
复制相似问题