Android Navigation Schublade auf ActionBar

? lemycanh @ | Original: StackOverFlow
---

Ich versuche, das Navigations Schublade über die Aktionsleiste zu machen, als es nach rechts schieben, wie diese App: [ Entfernt ]

Dies ist das Layout meiner Haupttätigkeit ist :

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout ...>
    <RelativeLayout android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent">
        ...
    </RelativeLayout>
    <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>

Einige andere Fragen auf Stackoverflow sind ähnlich wie http://stackoverflow.com/questions/21884675/drawerlayout-on-top-of-actionbar aber alle Antworten empfehlen, Schiebe-Menü lib verwenden . Aber diese App immer noch verwenden android.support.v4.widget.DrawerLayout und sie Erfolg haben. Fragen Sie mich nicht, wie ich weiß, dass sie mit dem Standard-Navigations Schublade, aber ich sicher .

Wäre wirklich dankbar sein für Ihre hilft .

Hier ist das fertige Lösung: vielen Dank an @ Peter Cai DIESE funktioniert perfekt.  https://github.com/lemycanh/DrawerOnTopActionBar

Android Navigation Schublade auf ActionBar Android Navigation Schublade auf ActionBar

---

Top 5 Antwort

1Richard Lindhout @

UPDATE : Wie man die Aktionsleiste mit nav Schublade zu überlagern. ( Mit der neuen Toolbar ) Verwenden Sie diese in Ihrem Abhängigkeiten in Ihrem build.gradle

compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.android.support:support-v4:21.0.0'

Dies als drawerlayout

<!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to consume the full space available. -->
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:id="@+id/layout_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    <include layout="@layout/toolbar"/>
    <!-- As the main content view, the view below consumes the entire
         space available using match_parent in both dimensions. -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"/>

    </LinearLayout>
    <fragment android:id="@+id/navigation_drawer"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@color/list_background"
         />

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

Knüpfen Sie neue toolbar.xml Datei in Ihrem Layout -Ordner.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary" />

Zum Ihnen Tätigkeit, die die Navigation Schublade zu erweitern. und fügen Sie diese nach SetContentView ()

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

Vergessen Sie nicht, Ihr Thema NoActionBar in Ihrem Ordner -Werte zu verlängern.

<style name="Theme.Whtsnxt" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="windowActionBar">false</item>
    <!-- colorPrimary is used for the default action bar background -->
    <item name="windowActionModeOverlay">true</item>
    <item name="android:textColorPrimary">@color/white</item>
    <item name="colorPrimary">@color/splashscreen</item>
    <item name="colorPrimaryDark">@color/holo_blue_light</item>

    <item name="android:windowBackground">@color/white</item>
    <item name="android:colorBackground">@color/white</item>

</style>
2Andranik @

Ich habe einen Trick, der das möglich in früheren Android- L -Versionen macht geschrieben . Sie können meine Lösung http://stackoverflow.com/a/25446028/1967189 finden. Hoffe, es kann nützlich sein, jemand zu sein .

3Peter Cai @

Ich habe einen kleinen "Trick" gelernt aus https://github.com/jfeinstein10/SlidingMenu um den gewünschten Effekt benötigt umzusetzen.

Sie müssen nur das erste Kind von Dekor Ansicht des Fensters zu entfernen, und fügen Sie den ersten Kindes zum Inhalt Auffassung der Schublade. Danach müssen Sie nur Ihre Schublade Dekor Ansicht des Fensters hinzuzufügen.

Im Folgenden finden Sie einige detaillierte Schritte für Sie zu tun.

Erstellen Sie zunächst eine XML- Namen " decor.xml " oder was du willst . Nur setzen die DrawerLayout und die Schublade . Das " FrameLayout " unten ist nur eine Container . Wir werden es verwenden, um den Inhalt Ihrer Tätigkeit zu wickeln.

<?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 nehmen Sie die DrawerLayout in Ihrem Haupt -Layout. Nun ist die Layout Ihrer Haupttätigkeit aussehen sollte

<RelativeLayout android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">
    ...
</RelativeLayout>

gehen wir davon aus, dass das Layout des Hauptaktivität wird mit dem Namen " main.xml " .

in Ihrer MainActivity, schreiben Sie die folgenden:

@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 haben Sie eine DrawerLayout die über die ActionBar gleiten kann haben . Aber Sie könnten es durch Statusleiste abgedeckt. Möglicherweise müssen Sie eine paddingTop auf die Schublade, um das zu beheben hinzuzufügen.