导航抽屉在状态栏上半透明的效果无法实现。
导航抽屉在状态栏上半透明的效果无法实现。
我正在为Android项目工作,正在实现导航抽屉。我正在阅读新的 Material Design Spec 和 Material Design Checklist。
规范指出,侧滑面板应该浮动在其他所有内容的上方,包括状态栏,并在状态栏上半透明。
我的导航面板在状态栏上方,但没有透明度。我遵循了这个 SO 帖子中的代码,如Google开发者博客中所建议的,以上链接 如何使用DrawerLayout在ActionBar/工具栏上方和状态栏下方显示?。
以下是我的XML布局
以下是我的应用程序主题
以下是我的应用程序v21主题
以下是我的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); }
下面是我导航抽屉的一个截图,显示顶部不是半透明的
你的状态栏背景是白色的,而你的抽屉布局LinearLayout
的背景也是白色的。为什么呢?因为你对DrawerLayout
和里面的LinearLayout
设置了fitsSystemWindows="true"
。这导致你的LinearLayout
会扩展到状态栏的后面(状态栏是透明的),所以抽屉的背景变成了状态栏的白色部分。
如果你不想让抽屉扩展到状态栏的后面(想要整个状态栏都是半透明的),你可以这么做:
1)你可以直接在LinearLayout
里面去掉背景,并将里面的内容进行背景着色。或者
2)你可以从LinearLayout
中去掉fitsSystemWindows="true"
。我认为这是一种更合理、更清洁的方法。这样还可以避免在状态栏下面产生阴影,导致你的导航抽屉无法扩展。
如果你想让抽屉扩展到状态栏后面,同时状态栏背景是半透明的,并且还有与状态栏同样大小的叠加层,你可以使用一个ScrimInsetFrameLayout
作为你抽屉内容(ListView
)的容器,并使用app:insetForeground="#4000"
来设置状态栏背景。当然,你可以将#4000
更改为任何你想要的颜色。但是这里也要记得保留fitsSystemWindows="true"
!
如果你不想重叠你的内容,只是想显示一个纯色,你可以将你的LinearLayout
的背景设置为任意颜色。但是也不要忘记分别为你的内容设置背景!
编辑:你不再需要处理任何这些内容了。请参考设计支持库,以实现更简单的导航抽屉/视图实现。