SlidingPaneLayout

2014-04-04T00:00:00+00:00 Android Java

公式リファレンス: http://developer.android.com/reference/android/support/v4/widget/SlidingPaneLayout.html

android.support.v4.widgetにSlidingPaneLayoutっていうのが追加されていたのを今更知ったので検証してみた

検証アプリのキャプチャ

{% youtube iYnP1LvmHpk %}

構成

以前書いたSwipeRefreshLayout同様にgradle-android-toolkit(+Android Studio)でやるんだけど、android-support-v4なmaven packageは古い模様なのでAPIが入っていない模様。なので自前で持ってきて

dependencies {
    compile files("libs/android-support-v4.jar")
}

辺りでビルドライブラリを追加するようにしておく

app/src/main/res/layout/activity_main.xml

<?xml version="1.0" ?>
<android.support.v4.widget.SlidingPaneLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/sliding_pane_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:name="sample.test.CategoryListFragment"
        android:layout_width="280dp"
        android:layout_height="match_parent"
        android:layout_gravity="left" />


    <fragment
        android:name="sample.test.MainListFragment"
        android:layout_width="300dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />

</android.support.v4.widget.SlidingPaneLayout>

的な感じで左paneに持ってくるのを最初にビューに指定して、メインで表示させておくのをそのあとにビューを指定する。上記の場合だと左paneにCategoryListFragmentでメインにMainListFragmentを表示するようなUI構成を作っている

んまぁそこは/path/to/android_sdk/extras/android/support/samples/Support4Demos/res/layout/sliding_pane_layout.xmlに書いてあるので

あとそのビューに使っているFragmentに関してはAdapterをバインドしているだけなので省略する

MainActivity.java

package sample.test;

import android.os.Bundle;
import android.support.v4.widget.SlidingPaneLayout;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.actionbarsherlock.app.SherlockFragmentActivity;

public class MainActivity extends SherlockFragmentActivity {

    private static final String TAG = MainActivity.class.getName();
    SlidingPaneLayout mSlidingPaneLayout;

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.activity_main);

        mSlidingPaneLayout = (SlidingPaneLayout)findViewById(R.id.sliding_pane_layout);
        mSlidingPaneLayout.setPanelSlideListener(new MainSlidingPanelListener());
    }

    private class MainSlidingPanelListener extends SlidingPaneLayout.SimplePanelSlideListener {

        @Override
        public void onPanelOpened(View view) {
            showToast("onPanelOpened");
        }

        @Override
        public void onPanelClosed(View view) {
            showToast("onPanelClosed");
        }
    }

    private void showToast(String message) {
        Toast.makeText(this, message, Toast.LENGTH_LONG).show();
    }
}

Listenerを使って開いたか閉じたかのイベントをキャッチ出来る模様。ちなみに上記動画でも発生しているけど、左paneをオープンした状態でスライドして閉じるのではなくメインpaneなところをタップして閉じようとするとonPanelOpened/onPanelClosedの両方なイベントが発生している模様なので開く際になんかする際は要注意かも知れないと

んまぁ今までだとSlidingMenu?とかそういう系のUIライブラリがあった訳だけど、android-support-v4辺りにそういうのをサポートするのも登場してきているのでこれも採用ありかも知れないっていう検討な候補としてありなのではないかと

selenium-webdriverを使ってChrome Extensionのテスト angular.jsをやってみる (17) - $broadcast -