SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

Xamarin.Android スライディングドローワー

【 Xamarin 記事一覧 】

スライディングドローワー


ViewGroupを継承したSliderDrawerを使用すると、開閉するビューが作成できます。
SliderDrawerでは、下記の要素を指定します。

android:handle ハンドルとなるビュー
android:contet 開いた時に表示するビュー
android:topOffset 開いた時のハンドルと上限界との余白

親となるメインビューではLinearLayoutは使えません。


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#008800"
        android:text="メインコンテンツ" />
    <SlidingDrawer
        android:id="@+id/slidingdrawer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:handle="@+id/handle"
        android:content="@+id/content"
        android:topOffset="30dp">
        <TextView
            android:id="@id/handle"
            android:background="#880000"
            android:text="ハンドル"
            android:layout_width="80dp"
            android:layout_height="30dp" />
        <LinearLayout
            android:id="@id/content"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="サブコンテンツ"
                android:background="#000088"/>
        </LinearLayout>
    </SlidingDrawer>
</FrameLayout >


イベント

SlidingDrawerでは、次の4種類のイベントを処理できます。

var slidingdrawer = (SlidingDrawer)FindViewById(Resource.Id.slidingdrawer);

slidingdrawer.ScrollStarted+= (sender, args) =>{
    //ハンドルのスクロールが始まった時のイベント(サブコンテンツの開閉の完了は関係ない)
};

slidingdrawer.ScrollEnded += (sender, args) => {
    //ハンドルのスクロールが完了した時のイベント(サブコンテンツの開閉が完了した時)
};

slidingdrawer.DrawerOpen += (sender, args) => {
    //サブコンテンツが開いた時のイベント
};

slidingdrawer.DrawerClose += (sender, args) => {
    //サブコンテンツが閉じた時のイベント
};

なお、SlidingDrawerは、Android.Views.ViewGroupを継承しているため、ViewGroupのイベントも当然利用可能です。

コードによる開閉

SlidingDrawerはハンドルを引っ張るだけでなく、コードからの開閉も可能です。

var slidingdrawer = (SlidingDrawer)FindViewById(Resource.Id.slidingdrawer);
slidingdrawer.AnimateToggle(); //開閉をトグルする
//slidingdrawer.AnimateOpen(); //アニメーションしながら開く
//slidingdrawer.Open();    //開く
//slidingdrawer.AnimateClose();//アニメーションしながら閉じる
//slidingdrawer.Close();       //閉じる

【 Xamarin 記事一覧 】