

例えばこんな感じに `SlidingPaneLayout`
で[マルチペインレイアウト](http://developer.android.com/design/patterns/multi-pane-
layouts.html)を作るとするでしょ

[code]

    <android.support.v4.widget.SlidingPaneLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/sliding_pane_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <fragment
            android:id="@+id/left"
            android:layout_width="240dp"
            android:layout_height="match_parent" />
    
        <FrameLayout
            android:id="@+id/right"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </android.support.v4.widget.SlidingPaneLayout>
    
[/code]

これをスマートフォンで見たら、左側のペイン( `@id/left` ) を開いたときに右側のペイン( `@id/right` ) が
操作(スクロールやタッチ)できなくなるよね ( [Navigation
Drawer](https://developer.android.com/design/patterns/navigation-drawer.html)
を開いたときみたいな)

でもタブレットで見たときは右ペインが操作できるんだ  
凛はタブレットのときも操作不能にさせたいんだにゃ  
つまり[Navigation
Drawer](https://developer.android.com/design/patterns/navigation-
drawer.html)みたいにしたいにゃ

そこで、左ペインの `layout_width` を変える以外に操作不能にさせる方法を教えてほしいにゃ


CC BY-SA 3.0
2015-01-28T12:56:05.683
5520
2015-02-07T10:36:09.843
2015-02-03T04:35:28.417
7903
7903
question
android android-layout android-fragments
SlidingPaneLayout でスマートフォンとタブレットで挙動を統一させたいにゃ


[Exploring SlidingPaneLayout](http://www.bignerdranch.com/blog/exploring-
slidingpanelayout/)を参考に、  
自分なりに下記のアレンジを致しましたのでご参照ください。

layout.xml

[code]

    <android.support.v4.widget.SlidingPaneLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/SlidingPanel"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/covered"
            android:layout_width="250dp"
            android:layout_height="match_parent"
            android:background="#CC00FF00"
            android:text="Pane 1" />
    
        <FrameLayout
            android:id="@+id/right"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@android:color/darker_gray">
            <!--背景を、フェードしたい色であらかじめ設定する-->
    
            <TextView
                android:id="@+id/hidden"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#CC0000FF"
                android:text="Pane 2" />
    
        </FrameLayout>
    
    </android.support.v4.widget.SlidingPaneLayout>
    
[/code]

Activity.javaの一部

[code]

    SlidingPaneLayout.PanelSlideListener panelListener = new SlidingPaneLayout.PanelSlideListener(){
    
        @Override
        public void onPanelClosed(View arg0) {
    
        }
    
        @Override
        public void onPanelOpened(View arg0) {
    
        }
    
        @Override
        public void onPanelSlide(View arg0, float arg1) {
            //arg1には0~1が入るらしい
            //https://developer.android.com/reference/android/support/v4/widget/SlidingPaneLayout.PanelSlideListener.html#onPanelSlide(android.view.View, float)
            FrameLayout frameLayout = (FrameLayout)arg0;
            View childView = frameLayout.getChildAt(0);
            dimCustomChildView(childView, arg1);
        }
    
        private void dimCustomChildView(View v, float mag){
            // メソッド名はSlidingPaneLayoutのソースコードを参考にした
            // https://github.com/android/platform_frameworks_support/blob/master/v4/java/android/support/v4/widget/SlidingPaneLayout.java#L967
            // 上記メソッドでalpha値とかbit演算とかしてfadeの条件を決めたりどーのこーのとした結果、landscapeの時
            // fadeを止めてるっぽいのだけれど、なるほど分からん。setAlphaを持ち出しました。
            // どなたか、解説してください!!
            if (mag > 0 && mag <= 1) {
                v.setAlpha(1 - mag);
            }
        }
    };
    
[/code]

以上、よろしく御願いいたします。


CC BY-SA 3.0
2015-01-29T12:26:00.443
5574
2015-02-07T10:36:09.843
2015-02-07T10:36:09.843
2904
2904
5520
answer