2015-12-10 7 views
5

Desidero creare il mio layout ActionBar.Aggiungi proprietà di navigazione in alto nel pulsante ActionBar personalizzato in Android

Ti piace questa (creata in Paint per esempio)

enter image description here

E 'possibile dare il secondo pulsante Proprietà Up-navigazione? Quindi se lo preme, termina questo Activity e avvia il suo genitore.

Desidero avere l'icona di hamburger per lo Navigation Drawer, l'icona su per la navigazione verso l'alto e il titolo dell'attività.

È possibile? O c'è già una soluzione?

risposta

1

In realtà, è abbastanza facile (anche se è poco hacky) da fare. In primo luogo, creare un drawable per pulsante indietro (preferibilmente - come selettore, distinguere premuto/stato normale:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@drawable/back_button_pressed"/> 
    <item android:drawable="@drawable/back_button"/> 
</selector> 

successivo, impostare questa drawable al logo della barra degli strumenti toolbar.setLogo(R.drawable.back_button_selector);

Allora l'unica cosa a sinistra è quello di impostare click-ascoltatore

View logoView = getToolbarLogoIcon(toolbar); 
logoView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     onBackPressed(); 
    } 
}); 

... 

private View getToolbarLogoIcon(Toolbar toolbar){ 
    //check if contentDescription previously was set 
    boolean hadContentDescription = android.text.TextUtils.isEmpty(toolbar.getLogoDescription()); 
    String contentDescription = String.valueOf(!hadContentDescription ? toolbar.getLogoDescription() : "logoContentDescription"); 
    toolbar.setLogoDescription(contentDescription); 
    ArrayList<View> potentialViews = new ArrayList<>(); 

    //find the view based on it's content description, set programatically or with android:contentDescription 
    toolbar.findViewsWithText(potentialViews,contentDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); 

    //Nav icon is always instantiated at this point because calling setLogoDescription ensures its existence 
    View logoIcon = null; 
    if (potentialViews.size() > 0) { 
     logoIcon = potentialViews.get(0); 
    } 

    //Clear content description if not previously present 
    if (hadContentDescription) { 
     toolbar.setLogoDescription(null); 
    } 

    return logoIcon; 
} 

(Grazie post di Nicola here) O, se non si ha paura di riflessione, può essere fatto facilmente in questo modo:..

try { 
     Field declaredField = toolbar.getClass().getDeclaredField("mLogoView"); 
     declaredField.setAccessible(true); 
     View logoView = (View) declaredField.get(toolbar); 
     logoView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onBackPressed(); 
      } 
     }); 
    } catch (Exception ex) { 
     //error 
    } 

Un'altra possibile soluzione sarebbe quella di impostare il layout personalizzato su ActionBar. Tuttavia, sto sostenendo di seguire le linee guida UI/UX e di ricontrollare, se il cassetto di navigazione è essenziale nell'attività secondaria.

+0

Grazie !! Ha funzionato! – raymondis

Problemi correlati