Xamarin.Android スライディングドローワー
スライディングドローワー
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(); //閉じる