导航抽屉在状态栏上半透明的效果无法实现。

8 浏览
0 Comments

导航抽屉在状态栏上半透明的效果无法实现。

我正在为Android项目工作,正在实现导航抽屉。我正在阅读新的 Material Design SpecMaterial 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);
    }

下面是我导航抽屉的一个截图,显示顶部不是半透明的

\"Screenshot

admin 更改状态以发布 2023年5月20日
0
0 Comments

你所需要做的就是在状态栏中使用一些半透明的颜色。把以下这些代码添加到你的v21主题中:

true
@color/desired_color

不要忘记color(资源)必须始终是#AARRGGBB格式。这意味着颜色也将包括alpha值。

0
0 Comments

你的状态栏背景是白色的,而你的抽屉布局LinearLayout的背景也是白色的。为什么呢?因为你对DrawerLayout和里面的LinearLayout设置了fitsSystemWindows="true"。这导致你的LinearLayout会扩展到状态栏的后面(状态栏是透明的),所以抽屉的背景变成了状态栏的白色部分。

enter image description here
如果你不想让抽屉扩展到状态栏的后面(想要整个状态栏都是半透明的),你可以这么做:

1)你可以直接在LinearLayout里面去掉背景,并将里面的内容进行背景着色。或者

2)你可以从LinearLayout中去掉fitsSystemWindows="true"。我认为这是一种更合理、更清洁的方法。这样还可以避免在状态栏下面产生阴影,导致你的导航抽屉无法扩展。

enter image description here
如果你想让抽屉扩展到状态栏后面,同时状态栏背景是半透明的,并且还有与状态栏同样大小的叠加层,你可以使用一个ScrimInsetFrameLayout作为你抽屉内容(ListView)的容器,并使用app:insetForeground="#4000"来设置状态栏背景。当然,你可以将#4000更改为任何你想要的颜色。但是这里也要记得保留fitsSystemWindows="true"

如果你不想重叠你的内容,只是想显示一个纯色,你可以将你的LinearLayout的背景设置为任意颜色。但是也不要忘记分别为你的内容设置背景!

编辑:你不再需要处理任何这些内容了。请参考设计支持库,以实现更简单的导航抽屉/视图实现。

0