Neue ActionBarDrawerToggle bei der Verwendung von AppCompatActivity

Heute hat Google die AppCompat-Bibliothek auf Version 22.1.0 aktualisiert und wir können nun AppCompatActivity anstelle von ActionBarActivity . Das bedeutet, dass wir in unserem Aktivitätslayout keine Toolbar Ansicht mehr haben müssen.

Das Problem ist, dass, um einen Schubladen-Toggle-Knopf zu erstellen, ich kein new ActionBarDrawerToggle mehr verwenden kann, weil es einen Toolbar Parameter erwartet, der nicht existiert.

  • Android - setOnClickListener Methode wie funktioniert es?
  • Wie loswerden weißen Streifen an der Oberseite des Bildschirms mit adjustResize
  • Wie kann man den Raum zwischen den Elementen in linearlayout in android erhöhen?
  • Konvertiere die Android-App in Google Play für Samsung Store
  • Keine Ressource gefunden, die den Vornamen in main.xml übereinstimmt
  • Cordova Phonegap lokale Benachrichtigungen funktionieren nicht
  • Wie soll ich jetzt die Toggle-Taste zur ActionBar hinzufügen?

  • Android Design Support TabLayout überlappende Inhalte
  • Ergebnis aus einer Aktivität nach beenden () erhalten; In einem Android-Unit-Test
  • XMPP (Openfire) Push Notifications Android
  • Deserialisierung eines JSON-Objekts mit mehreren Elementen darin
  • Gibt es einen Weg, um Fragment von der Oberseite des Stapels zu bekommen?
  • Fragment.newInstance () vc onSaveInstanceState ()
  • 4 Solutions collect form web for “Neue ActionBarDrawerToggle bei der Verwendung von AppCompatActivity”

    Eine mögliche Lösung

    Aktivität:

     import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; public class MainActivity extends AppCompatActivity { DrawerLayout drawerLayout; ActionBarDrawerToggle toggle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); toggle = new ActionBarDrawerToggle ( this, drawerLayout, R.string.navigation_drawer_open, R.string.navigation_drawer_close ) { }; drawerLayout.setDrawerListener(toggle); toggle.syncState(); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (toggle.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } } 

    Layout:

     <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" tools:context=".MainActivity"> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" /> <ListView android:id="@+id/list_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="#f1f2f7" android:choiceMode="singleChoice" android:divider="@android:color/transparent" /> </android.support.v4.widget.DrawerLayout> 

    Stil:

     <resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> </style> </resources> 

    Es ist wichtig, dass Ihre App das AppCompat-Thema erbt.

    Wenn Sie die Aktionsleiste durch eine Symbolleiste ersetzt haben, vergessen Sie nicht, die Aktionsleiste zurückzusetzen, indem Sie diese Zeile in der styles.xml entfernen:

     <item name="windowActionBar">false</item> 

    Gradle:

     dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-v4:22.1.1' compile 'com.android.support:appcompat-v7:22.1.1' } 

    Ich stelle diesen Code auf github: https://github.com/bbouabou/AppCompatActivity-With-ActionBarDrawerToggle .

    Nach den offiziellen Dokumenten verfügt die ActionBarDrawerToggle Klasse aus v7 über einen Toolbar-unabhängigen Konstruktor:

     public ActionBarDrawerToggle (Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes) 

    Dies funktioniert mit der Standard- ActionBar die durch die activity bereitgestellt wird. Also, wie immer, entweder:

    1. Sie erben von einem new ActionBarDrawerToggle(...) Thema, und rufen Sie new ActionBarDrawerToggle(...) ;
    2. Sie erben von einem .NoActionBar Thema, Instanziieren / Aufblasen eines Toolbar Objekts und rufen Sie new ActionBarDrawerToggle(..., Toolbar t, ...)

    Schaut auf mich, dass sich nichts mit dem ActionBarActivity Refactoring änderte.

    Wenn du das Standard-Navigations-Schubladen-Setup von Android Studio ActionBarDrawerToggle , dann habe ich Erfolg gefunden, indem ActionBarDrawerToggle Klasse von ActionBarDrawerToggle von v4 auf v7 in der import Anweisung ActionBarDrawerToggle und das Toolbar Argument aus dem ActionBarDrawerToggle Konstruktor ActionBarDrawerToggle .

    Ich konnte nicht finden, einen Weg, um die AppCompatActivity Standard-Symbolleiste verwenden, so dass die Theme.AppCompat.NoActionBar ich verwendet wurde, um die Theme.AppCompat.NoActionBar Thema verwenden und manuell fügen Sie die Symbolleiste, um die XML, wie ich es zuvor getan habe.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.