2013-09-06 18 views
8

Sto tentando di consentire all'utente di aprire/chiudere il riquadro di navigazione nella mia app toccando il titolo della barra delle azioni (ecco come è configurata l'attuale app Gmail per Android). Al momento, l'utente può attivare o disattivare il cassetto toccando l'icona app/cassetto o facendolo scorrere con un passaggio sinistro-destro. Tuttavia, il titolo della barra delle azioni non è selezionabile. Secondo lo developer docs, fare clic sul titolo della barra di azione deve "inviare onOptionsItemSelected all'attività dell'ospite con un oggetto Menu con ID articolo android.R.id.home" quando si utilizza NAVIGATION_MODE_STANDARD ma per qualche motivo non riesco a ottenere il titolo di comportarsi in questo modo.Attiva/disattiva il cassetto di navigazione tramite il titolo della barra delle azioni

Credo che il cassetto di navigazione di per sé soddisfacente, ma ecco come lo ha installato la barra delle azioni:

private void configureActionBar(CharSequence mTitle) { 

    ActionBar actionBar = getActionBar(); 

    actionBar.setDisplayHomeAsUpEnabled(true); 
    actionBar.setHomeButtonEnabled(true); 

    actionBar.setIcon(R.drawable.ic_blank); 

    GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, 
       new int[] { 
       0xFF004700, 0xFF002900 
       }); 

    gd.setCornerRadius(0f); 

    actionBar.setBackgroundDrawable(gd); 

    // set the title of the action bar using the given title 
    actionBar.setTitle(mTitle); 

} 

Qualche suggerimento sarebbe molto apprezzato!

risposta

23

Se si desidera che il cassetto per aprire toccando Icona/Titolo del ActionBar, vi suggerisco di utilizzare il ActionBarDrawerToggle classe prevista nella libreria di supporto (android.support.v4.app.ActionBarDrawerToggle)

Riferimento: https://developer.android.com/reference/android/support/v4/app/ActionBarDrawerToggle.html

Esempio di utilizzo:
https://developer.android.com/training/implementing-navigation/nav-drawer.html

Il trucco viene whe n catturando l'evento in onOptionsItemSelected(), che si deve passare alla ActionBarDrawerToggle, in modo che possa gestire la/richiesta di chiusura cassetto aperto:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Pass the event to ActionBarDrawerToggle, if it returns 
    // true, then it has handled the app icon touch event 
    if (mDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    // Handle your other action bar items... 

    return super.onOptionsItemSelected(item); 
} 
+0

Grazie per il post: in realtà ho già passato l'evento a mDrawerToggle come hai delineato (motivo per cui toccando l'icona dell'app attiva o disattiva il cassetto come previsto), ma ho problemi ad ottenere la stessa funzionalità da ActionBar titolo (separato dall'icona, come nell'app Gmail). Suppongo che sia possibile usare una vista personalizzata per ActionBar con TextView come titolo - quindi potrei impostare un ascoltatore onClick per la vista e chiamare openDrawer(), ma questo sembra meno elegante della soluzione che spero trovare. Grazie comunque! –

+0

Mmm strano perché l'app in uso funziona anche per il titolo. Infatti, l'icona + titolo agisce come un unico pulsante perché mette in evidenza sia ciò che faccio clic. Forse c'è un problema nell'utilizzo di ActionBarDrawerToggle che proviene dalla libreria di supporto con ActionBar che non lo è. Ho provato ad utilizzare ActionBar dalla libreria di supporto? Devi prendere getSupportActionBar() invece di getActionBar() ... Solo indovinando – nsL

+0

Ah, buona presa. Non ho usato SupportActionBar, quindi sarò sicuro di provarlo. Grazie! –

0

L'icona/Titolo viene visualizzato se l'attributo tema applicazione si trova in AndroidManifest.xml come questo:

<application 
    android:name=".SampleApp" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> 

res/valori/styles.xml detiene la dichiarazione tema

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 

funziona utilizzando android.support.v7.app.ActionBarDrawerTo ggle, la classe support.v4 è deprecata nel frattempo. Vedi How to use support-v7-appcompat library