Actionbar顶部的DrawerLayout

使用抽屉布局时,有没有办法将抽屉视图覆盖在操作栏上? 我不想在显示抽屉时隐藏操作栏。 我希望操作栏只是保持放置,但是要发送到后台。 一个例子是iOS Play音乐应用程序……

在此处输入图像描述

我当前的实现隐藏并显示抽屉状态更改时的操作栏,但我不喜欢此用户体验。

public void onDrawerClosed(View view) { getActionBar().show(); invalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { getActionBar().hide(); invalidateOptionsMenu(); } 

我在网上搜索,以find解决此问题的任何好方法,但没有find。 所以我做了一个这样的技巧。

首先,我们需要请求操作栏覆盖function。 所以在你的活动的onCreate()中,在setContntView()之前调用: requestWindowFeature(com.actionbarsherlock.view.Window.FEATURE_ACTION_BAR_OVERLAY);

它将使包括导航抽屉在内的一切都在动作栏后面绘制 我们不需要这个,所以我们需要设置FrameLayout的上边距,它在活动中使用操作栏的精确高度来托管我们的片段。 在活动的布局文件中,我们需要执行以下操作:

   

它只会使操作栏后面出现导航抽屉。 现在,当导航抽屉打开一半时,我们将隐藏操作栏,并在抽屉几乎关闭时显示。 为此,我们需要在活动中进行以下操作:

 @Override public void onDrawerSlide(View drawerView, float slideOffset) { super.onDrawerSlide(drawerView, slideOffset); if(slideOffset > 0.5){ actionBar.setBackgroundDrawable(null); actionBar.hide(); } else { actionBar.show(); if(slideOffset < 0.1){ actionBar.setBackgroundDrawable(layerDrawable); } } } 

正如您所看到的,我还会更改操作栏的背景可绘制,以便在我开始隐藏它之前使其透明,并在我显示它时使用我的自定义背景将其更改回来。

我的自定义背景是一个layerListDrawable,它是透明的,但在底部有一个带有阴影的分隔符。

为了实现这一点,我在XML中定义了以下层列表:

                  

为了从这个XML中获取我需要的背景,我在活动中执行以下操作:

 final ActionBar actionBar = getSupportActionBar(); final LayerDrawable layerDrawable = (LayerDrawable) getResources() .getDrawable(R.drawable.shadow_divider); final TypedArray styledAttributes = getTheme().obtainStyledAttributes( new int[] { R.attr.actionBarSize }); int topOffset = (int) (styledAttributes.getDimension(0, 0)); styledAttributes.recycle(); layerDrawable.setLayerInset(1, 0, topOffset - 3, 0, 2); layerDrawable.setLayerInset(2, 0, topOffset - 2, 0, 0); actionBar.setBackgroundDrawable(layerDrawable); 

其中R.drawable.shadow_divider是我之前定义的XML层列表。

它看起来真的很棒! 希望它可以帮助某人。

编辑

我这里有一个小虫子,有时可能是迷恋的原因。 这是固定代码:`

  ` 

它应该是paddingTop而不是layout_marginTop

这是Android默认设置中的正确效果。 如果您想模拟iOS效果,您可能必须自己动手,因为AFAIK支持库的抽屉组件不允许这种types的配置。

无论如何,每当程序员编写很多代码来模仿Android中的某些花哨(并且很可能不值得)的iOS效果时,一只小猫就会死…

我不认为你能用Android提供的导航抽屉(不做任何真正的hacky)来做到这一点,因为这样做真的违背了Android的设计模式。 如果你想要一个可以满足您所需要的库,我会在Android推出它自己的小部件之前使用这个库,它可以满足您的需求。

我在我的问题中find了答案,还添加了一个示例项目供参考。 您可以查看它是否适合您。 顶部ActionBar上的Android导航抽屉

您可以使用ActionBarSherlock实现此目的。

http://actionbarsherlock.com/

你可以这样做,但抽屉看起来很尴尬你不会喜欢它。 我有相同的要求,我最终使用自定义的单选按钮显示为选项卡。 您也可以尝试在抽屉打开时隐藏标签,反之亦然,但这肯定不是您想要的。

您可以尝试使用ViewPager,标签指示器,如PagerTabStrip和/或TabPageIndicator。

来源 。