Was Sie brauchen, um passieren zu v4.- widget.DrawerLayout.isDrawerOpen()/.openDrawer()/.closeDrawer()
Ich habe versucht meinen code auf der DrawerLayout
wie vorgeschlagen von android hier als SlidingDrawer
ist veraltet.
Mein problem ist, dass bisher DrawerLayout
scheint entweder sehr schlecht umgesetzt, hat wenig hilfreichen Fehlermeldungen (keine defensive Programmierung) und/oder nicht erklärt gut genug in der Dokumentation.
den isDrawerOpen()
Methode ist beschrieben hier:
public boolean isDrawerOpen (View Schublade)
Überprüfen, wenn die angegebene Zuführung Ansicht momentan im geöffneten Zustand. Werden
als "öffnen" in der Schublade haben muss, sich in seine vollständig sichtbar
Zustand. Um zu überprüfen, für die partielle Sichtbarkeit verwenden
isDrawerVisible(android.Blick.Ansicht).Parameter: Schublade - Schublade-Ansicht zu überprüfen,
Rückgabe: true, wenn die angegebene Zuführung Ansicht im geöffneten Zustand
Jede der Methoden isDrawerOpen(View drawer)
, openDrawer(View drawer)
und closeDrawer(View drawer)
nicht funktionieren, wenn bestanden: Das DrawerLayout
in Frage oder eines der Kinder. Ich habe keine Ahnung, was soll ich füttern Sie diese Methoden, um Ihnen zu erlauben, zu funktionieren. Kann jemand lassen Sie mich wissen?
Siehe unten für die komplette Beschreibung des Problems bei der Umsetzung.
Ich habe ein layout, in etwa so:
<android.support.v4.widget.DrawerLayout
android:id="@+id/mainmenuPanel"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/dualPane"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/menuPane"
android:layout_width="300dp"
android:layout_height="match_parent" />
</android.support.v4.widget.DrawerLayout>
Und in meinem code habe ich die folgende Methode verknüpft eine Taste:
protected void onCreate(Bundle savedInstanceState) {
...
mMenuPanel = (DrawerLayout) findViewById(R.id.mainmenuPanel);
....
}
public boolean isDrawerOpen() {
if(mMenuPanel != null) {
return mMenuPanel.isDrawerOpen(mMenuPanel);
}
return false;
}
Aber wenn Sie es selbst als argument (was überflüssig wäre, in der extreme) erhalten Sie die folgende Fehlermeldung:
E/AndroidRuntime(11241): java.lang.ClassCastException:
android.widget.FrameLayout$LayoutParams cannot be cast to
android.support.v4.widget.DrawerLayout$LayoutParams
(Die, wie Sie bemerken werden, nicht geben Ihnen alle Informationen darüber, was Sie falsch gemacht haben. Stattdessen ist es ein symtom des Problems).
Anderen Antworten hier oder hier sind entweder unverständlich oder sehr eng an die Frage ohne viel Erklärung. Auch so habe ich versucht, indem ein faux LinearLayout
oder einer der DrawerLayout
s Kinder und geben diese Fehler:
E/AndroidRuntime(11424): java.lang.IllegalArgumentException:
View android.widget.FrameLayout{420f5ea8 V.E..... ........
0,0-800,1172 #7f060038 app:id/menuPane} is not a drawer
Kann mir jemand erklären, was diese Methoden eigentlich haben müssen, übergeben Sie Sie zur Arbeit?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Und die Antwort:
Dem zweiten Kind (aka die "Schublade") ist das, was übergeben werden muss, um die Methoden. Mein problem war, dass durch die Zeit, die ich hatte, dass herausgefunden ich würde reduziert das layout auf möglichst einfache Implementierung zu testen, würde ich entfernte die Schwerkraft aus der "Schublade". Ohne Schwerkraft, erhalten Sie die oben genannten völlig unabhängig von Fehlermeldungen.
Kann ich bestätigen, ich habe den code für die Arbeit mit den folgenden Einstellungen:
und mit dem layout -:
DrawerLayout
, dieisDrawerOpen(...)
- Methode einen Aufruf zuisDrawer(...)
zu überprüfen, dieView
es übergeben wird ist eine Schublade. Die Kriterien ist zu prüfen, ob dieView
hat einelayout_gravity
entwederGravity.LEFT
oderGravity.RIGHT
. Die "start" -layout_gravity
ist ein alias kann verwendet werden, um zu bestimmen, welche Seite der Schublade verankert ist. Mit RTL (rechts-nach-Links) Sprachen wäre esGravity.RIGHT
für LTR-Sprachen es istGravity.LEFT
. Wenn keiner der sind, für denView
, dieisDrawer(..)
- Methode gibt false zurück.android:gravity
aberandroid:layout_gravity
!layout_gravity
. +10, wenn ich könnte.wenn Sie möchten, um zu vermeiden, Verweise auf views oder layouts, um isDrawerOpen, eine andere Art und Weise angewendet werden kann.
In diesem Fall müssen Sie angeben, die Schwerkraft:
Wird mDrawerLayout einen Verweis auf Ihre DrawerLayout.
als Sie sagte, vergessen Sie nicht
android:layout_gravity="start"
In Ihrer Tätigkeit, wenn Sie einen Verweis auf die DrawerLayout und in diesem Fall das FrameLayout mit der id R. id.menuPane können Sie auch tun...
Grundsätzlich haben Sie übergeben eine Referenz auf die Sicht als die Schublade, in die DrawerLayout, die immer mMenuPanel.getChildAt(1) sowieso.
Wenn Sie die Schublade layout aus der Bibliothek unterstützt, wie wir sehen können, aus Ihrer Frage, dass Sie auch sind, es ist auch die Methode:
Dies wird schließen Sie alle geöffneten Schubladen (die in der Regel nur die eine).