2013-05-06 87 views
0

我需要实现一个下拉视图,在ActionBar的最右侧有一个“句柄”。它应该是全宽度,并且在点击该句柄时用动画打开,并且另外该句柄本身应该是可拖动的。 minSdkVersion is 8从ActionBar下拉视图(菜单)

关于下拉功能本身,我发现SlidingDrawer不适合账单,因为它已被弃用到API v17,它只能从下到上打开。控制SlidingTray似乎解决了这个问题。我没有彻底测试它,但它似乎按预期工作。

现在的主要问题。是否有可能以这种方式显示视图?我曾尝试以设置动作条,其中充气XML看起来像这样的自定义视图:现在

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <my.package.drawer.SlidingTray 
     android:id="@+id/drawer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentRight="true" 
     android:content="@+id/content" 
     android:handle="@+id/handle" > 

     <ImageView 
      android:id="@+id/handle" 
      android:layout_width="88dp" 
      android:layout_height="44dp" 
      android:src="@drawable/ic_launcher" /> 

     <Button 
      android:id="@+id/content" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 
    </my.package.drawer.SlidingTray> 
</RelativeLayout> 

,该SlidingTray观点本身是否正常,当我把它的活动/片段布局如预期(可以拖动手柄并单击它可以打开/关闭托盘),但是在对ActionBar内部的上方布局进行充气时,按下/拖动手柄后,托盘只会在停止前移动几个像素 - 它不会超出ActionBar界限。这是主要问题 - 视图是否超出了ActionBar本身(通过下面显示的活动),如果是这样 - 如何?

回答

1

由于没有人回答,我会发布我如何解决这个问题。 经过对hierarchyviewer的一些检查之后,我看到ActionBar在一个LinearLayout中,因此,它不可能在ActionBar边界之外扩展它的一个子节点。所以我决定获取根(装饰)视图并在那里附上SlidingDrawer的修改版本。下面是摘录:

ViewGroup decor = (ViewGroup) getWindow().getDecorView(); 
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View drawerContainer = inflater.inflate(R.layout.sliding_drawer, null); 
drawer = (SlidingDrawer) drawerContainer.findViewById(R.id.drawer); 
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
decor.addView(drawerContainer, params); 

由于添加视图这种方式将其显示在状态栏后面,我还使得手柄和内容被显示在其下方加有25dp的顶部填充的容器图。

注意:如果您使用的是SlidingMenu库,则需要在onPostCreate()中执行此操作,因为库也会这样做,并会将您的视图放在所有其他内容的后面。