我在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 21:24:07
我在我的项目中实现了一个类似的特性。为了让我的抽屉变得透明,我只使用了transparency for hex colours。使用6个十六进制数字,红色、绿色和蓝色的每个值分别有2个十六进制数字。但是如果你添加两个额外的数字(8个十六进制数字),那么你就得到了ARGB (两个数字代表alpha值)(Look here)。
以下是十六进制不透明度值:对于两个额外的数字
100% — FF
95% — F2
90% — E6
85% — D9
80% — CC
75% — BF
70% — B3
65% — A6
60% — 99
55% — 8C
50% — 80
45% — 73
40% — 66
35% — 59
30% — 4D
25% — 40
20% — 33
15% — 26
10% — 1A
5% — 0D
0% — 00举个例子:如果你有十六进制的颜色(#111111),只需要设置一个不透明度值就可以得到透明度。如下所示:(#11111100)
我的抽屉没有覆盖操作栏(就像你的一样),但透明度也可以应用于这些情况。下面是我的代码:
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#11111100"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>这里是另一个article,它可以帮助您理解十六进制颜色的alpha代码。
https://stackoverflow.com/questions/26745300
复制相似问题