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: Paypal Preapproval API-Betrieb (Beispiel erforderlich)
  • Android / gradle: Geben Sie den Versionsnamen aus dem Aroma im Apk-Dateinamen ein
  • SimpleCursorAdapter mit ImageView und TextView
  • Äquivalent von CSS-Klassenselektoren für Android-Ansichten?
  • Android Studio / Gradle Build scheitert im Release: Konnte nicht die Abhängigkeiten der Task ': app: crashlyticsStoreDeobsRelease'
  • Exportieren Sie unsigned apk aus einem Gradle Project in Android Studio
  • Wie soll ich jetzt die Toggle-Taste zur ActionBar hinzufügen?

  • Was ist der Unterschied zwischen Thread.setPriority () und android.os.Process.setThreadPriority ()
  • Java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader
  • Was ist die Android UI Thread Stack Größe zu begrenzen und wie man es zu überwinden?
  • Erhalten Sie aktive Flaggen auf Android-Fenster
  • Transfer von InputStream zu einem anderen Service (über Prozessgrenzen hinweg) mit ParcelFileDescriptor.createPipe () schlägt mit "EBADF (schlechte Dateinummer)"
  • So fügen Sie das Action-Bar-Optionen-Menü in Android-Fragmente hinzu
  • 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.