2013-05-16 16 views
8

最近サポートライブラリに含まれている新しいDrawerLayoutで遊んでいます。私は重力としてSTARTとENDを使用していましたが、すべてが魅力的なように機能していましたが、TOPやBOTTOMの重力を持つ引き出しを追加しようとするとクラッシュしました。TOPとBOTTOMの重力を使用するとAndroid DrawerLayoutが失敗する

引き出しを上および/または下からスライドするのに使用できますか?

以下は、自分のアクティビティとxmlレイアウトの作業状態を示す完全なコードです。この中

<ListView android:id="@+id/right_drawer" 
        android:layout_width="240dp" 
        android:layout_height="match_parent" 
        android:layout_gravity="end" 
        android:choiceMode="singleChoice" 
        android:divider="@android:color/transparent" 
        android:dividerHeight="0dp" 
        android:background="#007799"/> 

(layout_widthで通知変化、layout_heightとlayout_gravity):

<ListView android:id="@+id/right_drawer" 
        android:layout_width="match_parent" 
        android:layout_height="300dp" 
        android:layout_gravity="bottom" 
        android:choiceMode="singleChoice" 
        android:divider="@android:color/transparent" 
        android:dividerHeight="0dp" 
        android:background="#007799"/> 

とライン:

this.drawer.openDrawer(GravityCompat.START); 

情報この1:

私はこれを変更しようとした場合
this.drawer.openDrawer(Gravity.BOTTOM); 

は、次のエラー:

05-16 05:22:33.981 1503-1503/es.luixal.test     E/AndroidRuntime: FATAL EXCEPTION: main 
     java.lang.RuntimeException: Unable to start activity ComponentInfo{es.luixal.test/es.luixal.test.MainActivity}: java.lang.IllegalArgumentException: View android.widget.RelativeLayout{42664c80 V.E..... ......I. 0,0-0,0} is not a sliding drawer 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
     at android.app.ActivityThread.access$600(ActivityThread.java:141) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:5039) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
     at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.IllegalArgumentException: View android.widget.RelativeLayout{42664c80 V.E..... ......I. 0,0-0,0} is not a sliding drawer 
     at android.support.v4.widget.DrawerLayout.openDrawer(DrawerLayout.java:970) 
     at android.support.v4.widget.DrawerLayout.openDrawer(DrawerLayout.java:1003) 
     at es.luixal.test.MainActivity.onCreate(MainActivity.java:30) 
     at android.app.Activity.performCreate(Activity.java:5104) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
     ... 11 more 

なぜこの他の重力を使用できないのか?

ありがとうございます!

MainActivity.java

package es.luixal.test; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.view.Menu; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class MainActivity extends Activity { 

private DrawerLayout drawer; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // filling list items: 
    ListView listView = (ListView)findViewById(R.id.left_drawer); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new String[]{ 
      "MenuItem 1", 
      "MenuItem 2", 
      "MenuItem 3" 
    }); 
    listView.setAdapter(adapter); 
    // 
    this.drawer = (DrawerLayout)findViewById(R.id.drawer_layout); 
    this.drawer.openDrawer(GravityCompat.START); 
} 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
    } 
} 

activity_main.xml

<RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

     <TextView android:id="@+id/text" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:text="Hi!" 
       /> 
    </RelativeLayout> 

    <ListView android:id="@+id/left_drawer" 
       android:layout_width="240dp" 
       android:layout_height="match_parent" 
       android:layout_gravity="start" 
       android:choiceMode="singleChoice" 
       android:divider="@android:color/transparent" 
       android:dividerHeight="0dp" 
       android:background="#44aa00"/> 

    <ListView android:id="@+id/right_drawer" 
       android:layout_width="240dp" 
       android:layout_height="match_parent" 
       android:layout_gravity="end" 
       android:choiceMode="singleChoice" 
       android:divider="@android:color/transparent" 
       android:dividerHeight="0dp" 
       android:background="#007799"/> 

</android.support.v4.widget.DrawerLayout> 
+0

私は@ roman-nurikに彼の[g + poster](https://plus.google.com/113735310430199015092/posts/bjiNbjAFsT2)DrawerLayoutのプレゼンテーションについて、彼は次のように指摘しました:_ "いいえ、間違いなく垂直重力と一緒に使うつもりはありません" _したがって、これを働かせようとしています。垂直引き出しを実装するための代替手段はありますか? – luixal

+0

あなたはSlidingDrawerを使用できますか? –

+0

https://github.com/Ali-Rezaei/SlidingDrawerをご覧ください。数行のコードでいずれの側からでもスライドすることができます。 – Ali

答えて

6

をDrawerLayoutは「ボトム」または「トップ」重力を使用するための公式リファレンスはありません - Source

public void openDrawer (int gravity)

Open the specified drawer by animating it out of view.

Parameters gravity

Gravity.LEFT to move the left drawer or Gravity.RIGHT for the right. GravityCompat.START or GravityCompat.END may also be used.

他の視覚効果を使用したい場合 - 他のライブラリを使用する

1

サイモンVIG TherkildsenによってMenu-Drawerライブラリは、標準のスライドメニューの引き出しとしてうまく機能だけでなく、トップと下の引き出し。彼のサンプルアプリケーションには、TOP/BOTTOMの重力を使ってメニューを実装する方法の例があります。

11

我々は最近、Umanoアプリケーションでこの機能を実装して開かれているが、それを調達:

https://github.com/umano/AndroidSlidingUpPanel

+0

これは、質問が尋ねたように、これは上から下に滑り落ちるのではなく、下からスライドすることをサポートしているようです。 – phreakhead

+0

これは非常に簡単な編集です。私はこれを追加します – tokudu

関連する問題