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;
}
}
}
}
ボタンとドロワー自体からのイベントを個別に処理するようになりました。