1

私の問題は次のとおりです: ハンドラー (スライドが開閉に使用するビュー) が、次の図のようにボタンが接続されているような構成ビューであるスライド ドロワーを作成したい:

ここに画像の説明を入力

望ましい動作は次のとおりです。

  1. ユーザーがハンドラーをクリックすると、ドロワーが開きます (ボタンはビューにアタッチされているため、ビューに従います)。
  2. ボタンをクリックすると、システムが別の処理を行います (私の場合、引き出しの子としてビューを追加するオプションを含むダイアログ ボックスを開きます)。

このタイプの実装における主な問題は、ボタン「+」がハンドラーの一部であり、オーバーライドされたリスナー onclick を作成できないという事実により、リスナーが競合することです。最初のアプローチとして、これをすべてプログラムで行うことを考えていますが、このレイアウトを簡単に行う方法が他にあるのではないかと本当に思っています。

誰かが与えるヒントを持っていますか、またはxmlのみでこれを実装する方法を知っていますか? 前もって感謝します!

4

1 に答える 1

1

LinearLayout を、 SlidingDrawerコンテナーのハンドルまたはコンテンツ要素のコンテナーとして使用できます。次のように:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <SlidingDrawer android:id="@+id/drawer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="showPopUp"
        android:handle="@+id/handle"
        android:content="@+id/content">
        <LinearLayout android:id="@id/content"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <!-- here goes your content -->
        </LinearLayout>
        <LinearLayout android:id="@id/handle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ffff5600"
            android:orientation="horizontal">
            <TextView android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="4"
                android:layout_gravity="left"
                android:text="musicas" />
            <Button android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="showPopUp"
                android:text="+" />
        </LinearLayout>
    </SlidingDrawer>
</LinearLayout>

ボタンを押すイベントをキャプチャすることはできませんが、上のスクリーンショットのようなレイアウトを作成できます。このために、私はいくつかの調査を行い、MultiDirectionSlidingDrawer (ソースhttp://blog.sephiroth.it/2011/03/29/widget-slidingdrawer-top-to-bottom/ ) をオーバーライドすることをお勧めします。私は次のようにしました: onInterceptTouchEvent()メソッドで、後に次のコードを追加しましたfinal View handle = mHandle;

    boolean handleTouch = false;
    if (mHandle instanceof ViewGroup) {
        ViewGroup group = (ViewGroup) mHandle;

        int count = group.getChildCount();
        for (int i = 0; i < count; i++) {
            View v = group.getChildAt(i);
            v.getHitRect(frame);
            if (frame.contains((int) x, (int) y)) {
                handleTouch = v.onTouchEvent(event);
                if (handleTouch) {
                    return false;
                }
            }
        }
    }

ボタンとドロワー自体からのイベントを個別に処理するようになりました。

于 2012-06-14T21:22:17.977 に答える