0

我需要实现一个下拉视图,该视图在 ActionBar 的最右侧有一个“句柄”。当手柄被点击时,它应该是全宽的并以动画形式打开,另外手柄本身应该是可拖动的。minSdkVersion 为 8

关于下拉功能本身,我发现SlidingDrawer不符合要求,因为它在 API v17 中已被弃用,并且只能从下到上打开。控件SlidingTray似乎克服了这个问题。我还没有彻底测试它,但它似乎按预期工作。

现在到主要问题。甚至可以以这种方式显示视图吗?我尝试为 ActionBar 设置自定义视图,其中膨胀的 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 视图本身放在活动/片段布局中时(可以拖动手柄并单击它以打开/关闭托盘),SlidingTray 视图本身按预期运行,但是当在 ActionBar 内部膨胀布局时,以及按下/拖动手柄,托盘在停止之前只移动几个像素 -它不会超出 ActionBar 的边界。这是主要问题 - 视图是否可以超越 ActionBar 本身(在下面显示的活动之上),如果是这样 - 如何?

4

1 回答 1

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(),因为该库也执行此操作,并将您的视图置于所有其他内容的后面。

于 2013-05-17T11:16:56.630 回答