2015-04-21 11 views
10

Oggi Google ha aggiornato la libreria AppCompat alla versione 22.1.0 e ora è possibile utilizzare AppCompatActivity anziché ActionBarActivity. Ciò significa che non è più necessario avere una vista Toolbar nel nostro layout delle attività.nuovo ActionBarDrawerToggle quando si utilizza AppCompatActivity

Il problema è che per creare un pulsante di attivazione/disattivazione del cassetto non è più possibile utilizzare new ActionBarDrawerToggle perché prevede un parametro Toolbar, che non esiste.

Come dovrei aggiungere il pulsante di attivazione a ActionBar ora?

+0

Per curiosità - chi sta dicendo che * "non è più necessario avere una vista della barra degli strumenti nel nostro layout delle attività" *? Non riesco a trovare alcun riferimento per questo. – reVerse

+0

Il nuovo 'AppCompatActivity' dispone già di una barra degli strumenti (che credo possa essere rimossa/nascosta se lo si desidera), quindi non è necessario aggiungerne un'altra – Guilherme

+0

L'appCompatActivity presenta un' ActionBar' per impostazione predefinita. Devi ancora modificare il tema in 'Theme.AppCompat.NoActionBar' e aggiungere una' Toolbar' al tuo layout. – reVerse

risposta

15

Una possibile soluzione

attività:

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); 
    } 
} 

Disposizione:

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

Stile:

<resources> 


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

</resources> 

E 'importante che la vostra applicazione ereditano il tema AppCompat.

Se è stato sostituito l'ActionBar da una barra degli strumenti non dimenticate di rimettere l'ActionBar rimuovendo questa linea nel styles.xml:

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

ho messo questo codice su github: https://github.com/bbouabou/AppCompatActivity-With-ActionBarDrawerToggle.

+2

Finalmente! Funziona per me! Thx! – AlexMomotov

+0

Come ottengo l'icona dell'hamburger? Secondo le linee guida del materiale, dovrebbe essere usato, ma questo codice ti dà una semplice freccia indietro? –

+0

@MrPablo : Probabilmente ti sei perso qualcosa, questo codice dovrebbe darti icona hamburger quando il cassetto è chiuso e freccia quando il cassetto è aperto –

-2

Non sono riuscito a trovare un modo per utilizzare la barra degli strumenti predefinita di AppCompatActivity, quindi la soluzione da utilizzare era utilizzare il tema Theme.AppCompat.NoActionBar e aggiungere manualmente la barra degli strumenti all'XML come facevo prima.

+0

Dove hai letto "AppCompatActivity' ha un predefinito' Barra degli strumenti'? – natario

4

Come per official docs, la classe ActionBarDrawerToggle da v7 dispone di una barra degli strumenti costruttore indipendente:

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

questo funzionerà con il default ActionBar fornito attraverso activity. Quindi, come sempre:

  1. ereditate da un tema della barra delle azioni e chiamate new ActionBarDrawerToggle(...);
  2. si eredita da un tema .NoActionBar, istanziare/gonfiare un oggetto Toolbar, e chiamare new ActionBarDrawerToggle(..., Toolbar t, ...)

Sembra a me che nulla è cambiato con l'ActionBarActivity refactoring.

+0

funziona davvero dopo lo swithcing dalla libreria di supporto v4 a v7 –

3

Se si utilizza di default l'installazione di navigazione cassetto di Android Studio, poi ho trovato il successo modificando NavigationDrawerFragment.java s' ActionBarDrawerToggle classe v4-v7 nella dichiarazione import e omettendo l'argomento Toolbar dal costruttore ActionBarDrawerToggle.

+1

funziona, grazie – enzo

+0

hi @SQLiteNoon, per favore puoi mostrare il tuo nuovo costruttore. Il mio ha questi parametri (nuovo ActionBarDrawerToggle (getActivity, DrawerLayout, R.drawable.ic_drawer, "open", close " –

Problemi correlati