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 ビュー自体は、アクティビティ/フラグメント レイアウト (ハンドルをドラッグしてクリックしてトレイを開閉できます) に配置すると期待どおりに機能しますが、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);

この方法でビューを追加すると、ステータス バーの背後に表示されるため、ハンドルとコンテンツがその下に表示されるように、上部パディングが 25 dp のコンテナー ビューも追加しました。

注: SlidingMenuライブラリを使用している場合は、これを で行う必要があります。これはonPostCreate()、ライブラリもこれを行い、他のすべてのコンテンツの背後にビューを配置するためです。

于 2013-05-17T11:16:56.630 に答える