在Actionbar上面的DrawerLayout

使用抽屉布局时,是否有一种方法可以将抽屉视图覆盖在动作栏上? 显示抽屉时,我不想隐藏操作栏。 我希望操作栏保持原样,但发送到后台。 iOS Play音乐应用就是一个例子

在这里输入图像说明

我当前的实现隐藏和显示抽屉状态变化时的操作栏,但我不喜欢这种用户体验。

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

Solutions Collecting From Web of "在Actionbar上面的DrawerLayout"

我在网上search,以find任何这个问题的好办法,并没有find。 所以我做了一个这样做的伎俩。

首先我们需要请求动作条叠加function。 所以在你的activity的onCreate()之前, setContntView()调用: requestWindowFeature(com.actionbarsherlock.view.Window.FEATURE_ACTION_BAR_OVERLAY);

它会使所有的东西包括抽屉后面的动作栏。 我们不需要这个,所以我们需要设置我们的FrameLayout的顶部边距,它将活动的主体放在活动条的高度。 在活动的布局文件中,我们需要执行以下操作:

 <!-- Framelayout to display Fragments --> <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="?attr/actionBarSize" /> 

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

 @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中定义了以下层次列表:

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp"> <shape android:shape="rectangle"> <solid android:color="@android:color/transparent"/> </shape> </item> <item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp"> <shape android:shape="rectangle"> <solid android:color="#afafaf"/> </shape> </item> <item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp"> <shape android:shape="rectangle"> <gradient android:angle="270" android:startColor="#88afafaf" android:endColor="#33afafaf" /> </shape> </item> </layer-list> 

为了从这个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层次列表。

它看起来非常棒! 希望它可以帮助别人。

编辑

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

  <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="match_parent" **android:paddingTop="?attr/actionBarSize"** />` 

它应该是paddingToplayout_marginTop

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

无论如何,每当一个程序员编码很多只是为了模仿Android的一些奇特的(很可能不值得)的iOS效果,一只小猫死亡…

我不认为你可以用Android提供的导航抽屉来做到这一点(而不是做一些真正的黑客行为),因为这样做确实违背了Android的devise模式。 如果你想要一个能够做你要找的东西的图书馆,那么在Android出来之前,我已经使用了这个图书馆,它是你自己的工具。

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

你可以通过ActionBarSherlock实现这一点。

http://actionbarsherlock.com/

你将能够做到这一点,但抽屉看起来很尴尬,你不会喜欢它。 我有相同的要求,我最终使用单选button自定义显示为选项卡。 当抽屉打开时,您也可以尝试隐藏选项卡,反之亦然,但是这当然不是您想要的。

您可以尝试使用ViewPager,选项卡式指示器(如PagerTabStrip和/或TabPageIndicator)。

来源 。