2015-04-21 8 views
10

Heute hat Google die AppCompat-Bibliothek auf Version 22.1.0 aktualisiert, und wir können jetzt AppCompatActivity anstelle von ActionBarActivity verwenden. Dies bedeutet, dass wir in unserem Aktivitätslayout keine Toolbar Ansicht mehr benötigen.neues ActionBarDrawerToggle bei Verwendung von AppCompatActivity

Das Problem ist, dass ich eine nicht mehr verwenden kann, um eine Schublade Wechselschaltfläche zu erstellen, weil es einen Toolbar Parameter erwartet, der nicht vorhanden ist.

Wie soll ich jetzt die Umschaltfläche zur ActionBar hinzufügen?

+0

Aus Neugier - wer sagt das * "wir brauchen nicht mehr eine Toolbar-Ansicht in unserem Aktivitätslayout" *? Ich kann keine Referenz dafür finden. – reVerse

+0

Die neue 'AppCompatActivity' verfügt bereits über eine Symbolleiste (von der ich glaube, dass sie entfernt/ausgeblendet werden kann), sodass Sie keine weitere hinzufügen müssen. – Guilherme

+0

Die' AppCompatActivity' enthält standardmäßig eine 'ActionBar'. Sie müssen das Theme immer noch in 'Theme.AppCompat.NoActionBar' ändern und Ihrem Layout eine' Toolbar' hinzufügen. – reVerse

Antwort

15

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 erben.

Wenn Sie die ActionBar durch eine Symbolleiste ersetzt nicht vergessen, die ActionBar zurück zu setzen, indem Sie diese Zeile in der styles.xml Entfernung:

<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' 
} 

habe ich diesen Code auf GitHub: https://github.com/bbouabou/AppCompatActivity-With-ActionBarDrawerToggle.

+2

Endlich! Es funktioniert für mich! Thx! – AlexMomotov

+0

Wie bekomme ich das Hamburger-Symbol? Nach den Materialrichtlinien sollte es verwendet werden, aber dieser Code gibt Ihnen einen einfachen zurück Pfeil? –

+0

@MrPablo : Sie haben wahrscheinlich etwas verpasst, dieser Code sollte Ihnen Hamburger Symbol, wenn Schublade geschlossen ist und Pfeil wenn Schublade geöffnet ist –

-2

Ich konnte keinen Weg finden, die Standard-Werkzeugleiste von AppCompatActivity zu verwenden. Die von mir verwendete Problemumgehung bestand darin, das Thema Theme.AppCompat.NoActionBar zu verwenden und die Werkzeugleiste wie zuvor manuell zum XML hinzuzufügen.

+0

Wo hast du gelesen, dass 'AppCompatActivity' eine Standard' Toolbar' hat? – natario

4

Wie pro official docs, die ActionBarDrawerToggle Klasse von v7 verfügt über einen Symbolleiste unabhängigen Konstruktor:

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

Dies wird mit dem Standard arbeitet ActionBar durch activity zur Verfügung gestellt. Also, wie immer, entweder:

  1. erben Sie von einem Aktionsleiste Thema, und rufen Sie new ActionBarDrawerToggle(...);
  2. Sie von einem .NoActionBar Thema erben, instanziiert/aufblasen ein Toolbar Objekt, und rufen new ActionBarDrawerToggle(..., Toolbar t, ...)

mir Sieht aus, dass nichts mit dem Refactoring ActionBarActivity geändert.

+0

funktioniert wirklich nach dem Wechsel von v4 zu v7 Unterstützung Bibliothek –

3

Wenn Sie Android Studio Standard-Navigationsleiste Setup verwenden, dann fand ich den Erfolg von NavigationDrawerFragment.java ‚s ActionBarDrawerToggle Klasse v4-v7 in der import Anweisung geändert und das Toolbar Argument vom ActionBarDrawerToggle Konstruktor weggelassen wird.

+1

es funktioniert, danke – enzo

+0

hi @SQLiteNoon, bitte können Sie Ihren neuen Konstruktor zeigen. Mine hat diese Parameter (new ActionBarDrawerToggle (getActivity, DrawerLayout, R.drawable.ic_drawer, "open", "close") –

Verwandte Themen