Ich habe einen kleinen "Trick" aus https://github.com/jfeinstein10/SlidingMenu gelernt, um den gewünschten Effekt zu implementieren.
Sie müssen nur das erste Kind der Dekoransicht des Fensters entfernen und das erste Kind in die Inhaltsansicht Ihrer Schublade einfügen. Danach müssen Sie Ihre Schublade nur zur Dekoransicht des Fensters hinzufügen.
Unten finden Sie einige detaillierte Schritte für Sie.
Erstellen Sie zuerst eine XML-Datei namens "decor.xml" oder etwas, das Sie mögen. Lege nur das DrawerLayout und die Schublade hinein. Das "FrameLayout" darunter ist nur ein Container. Wir werden es verwenden, um den Inhalt Ihrer Aktivität zu verpacken.
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout ...>
<FrameLayout android:id="@+id/container"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<fragment android:name="com...."
android:layout_gravity="start"
android:id="@id/navigation"
android:layout_width="@dimen/navigation_menu_width"
android:layout_height="fill_parent" />
</android.support.v4.widget.DrawerLayout>
und entfernen Sie dann das DrawerLayout in Ihrem Hauptlayout.Nun ist das Layout Ihrer Haupttätigkeit soll wie folgt aussehen
<RelativeLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
...
</RelativeLayout>
wir davon ausgehen, dass die Layout der Hauptaktivität „main.xml“ genannt.
in Ihrem MainActivity, schreiben, wie folgt zusammen:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Inflate the "decor.xml"
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
DrawerLayout drawer = (DrawerLayout) inflater.inflate(R.layout.decor, null); // "null" is important.
// HACK: "steal" the first child of decor view
ViewGroup decor = (ViewGroup) getWindow().getDecorView();
View child = decor.getChildAt(0);
decor.removeView(child);
FrameLayout container = (FrameLayout) drawer.findViewById(R.id.container); // This is the container we defined just now.
container.addView(child);
// Make the drawer replace the first child
decor.addView(drawer);
// Do what you want to do.......
}
Jetzt hast du ein DrawerLayout, die über die ActionBar gleiten kann. Aber Sie könnten es durch die Statusleiste abgedeckt finden. Möglicherweise müssen Sie der Schublade ein paddingTop hinzufügen, um dies zu beheben.
Bestätigt, dass dieser Hack wie erwartet funktioniert. Wir müssen Padding zu Schublade hinzufügen, hier ist der Trick, Statusleiste Höhe zu bekommen: http://StackOverflow.com/Questions/ 20584325/zuverlässig-erhalten-Höhe-Status-bar-zu-lösen-kitkat-translucent-Navigation-Problem. Ein weiterer Hack ist, wenn wir Fragment zu Container hinzufügen möchten, anstatt wie folgt hinzufügen: FragmentTransaction.replace (R .id.contai ner, Fragment); Wir sollten zu R.id.content ersetzen. fragmentTransaction.replace (getContentIdResource(), Fragment); ... private int getContentIdResource() { \t \t Rückgabe getResources(). GetIdentifier ("Inhalt", "ID", "Android"); \t} – lemycanh
@lemycanh Eine andere Lösung, die ich zum Hinzufügen von Fragment verwenden, ist das Hinzufügen eines Containers im Hauptlayout. Das Schubladenlayout wurde vom Hauptlayout getrennt. Daher muss R.id.container nur das in main.xml definierte Layout umbrechen. –
große Antwort! Nach der Implementierung erkannte ich, dass wir tatsächlich einen Blick von einem anderen Layout stehlen und es wegwerfen! ha ha – uLYsseus