2013-05-16 7 views
8

Po prostu bawię się z nową wersją DrawerLayout dodaną niedawno do biblioteki pomocy technicznej. Wdrożyłem prosty przykład z wieloma szufladami, podczas gdy ja używałem START i END, ponieważ grawitacja to wszystko działało jak czar, ale kiedy próbuję dodać szufladę z GÓRNYM lub GŁĘBOKIM grawitacji, to się zawiesza.Android DrawerLayout kończy się niepowodzeniem, gdy używane są gamy TOP i BOTTOM

Czy można go używać do przesuwania szuflad od góry i/lub od dołu?

Poniżej znajduje się pełny kod dla mojej aktywności i układu xml w stanie roboczym; Gdy próbuję zmienić to:

<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"/> 

do tego (zmiany zawiadomienia w layout_width, layout_height i 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"/> 

a linia:

this.drawer.openDrawer(GravityCompat.START); 

informacji to jedno:

this.drawer.openDrawer(Gravity.BOTTOM); 

jest kiedy ja ge t następujący błąd:

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 

Jakieś wskazówki, dlaczego nie mogę użyć tej innej giętkości?

Dzięki!

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

Poprosiłem @ rzymskokatolicki nurik o tym w swoim [g + post] (https://plus.google.com/113735310430199015092/posts/bjiNbjAFsT2) o prezentacji w programie DrawerLayout i wskazał, że: _ "Nie, zdecydowanie nie jest przeznaczony do użycia z pionowymi grawitacjami" _ więc myślę, że nie ma sensu próbując zmusić to do działania. Wszelkie alternatywy do realizacji pionowych szuflad? – luixal

+0

mabe można użyć SlidingDrawer? –

+0

Spójrz na https://github.com/Ali-Rezaei/SlidingDrawer, który umożliwia przesuwanie z dowolnej strony o kilka linii kodu. – Ali

Odpowiedz

6

nie ma oficjalnego odniesienia dla DrawerLayout używać "dół" lub "Top" Gravity - 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.

Jeśli chcesz użyć innych efektów wizualnych - korzystać z innych bibliotek

1

Menu-Drawer biblioteka Simon Vig Therkildsen działa dobrze jako standardowy przesuwnych menu szuflady, ale również obsługuje top i dolne szuflady. Jego przykładowa aplikacja zawiera przykłady, jak zaimplementować menu z obciążeniem TOP/BOTTOM.

Powiązane problemy