2015-12-10 15 views
5

Ich möchte meine eigenen ActionBar Layout erstellen.Add-Up-Eigenschaften in benutzerdefinierten ActionBar Button in Android

wie folgt aus (in Paint beispielsweise erstellt)

enter image description here

Ist es möglich, die zweite Taste, um die Up-Navigationseigenschaften zu geben? Also, wenn ich es drücke, beende dieses Activity und starte es als Elternteil.

Ich möchte den Burger-Icon für die Navigation Drawer, das Up-Icon für Up-Navigation und den Titel der Aktivität haben.

Ist es möglich? Oder gibt es schon eine Lösung?

Antwort

1

Eigentlich ist es ziemlich einfach (obwohl es wenig hacky ist) zu tun. Erstellen Sie zunächst eine ziehbar für Rücktaste (vorzugsweise - als Selektor, gedrückt zur Unterscheidung/Normalzustand:

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

Als nächstes dieses ziehbar auf das Logo der Werkzeugleiste toolbar.setLogo(R.drawable.back_button_selector);

Dann ist die einzige Sache, links klicken-Hörer einstellen

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

(Dank Nicola des Post here) Oder wenn Sie keine Angst vor Reflexion sind, kann es leicht wie folgt erfolgen:..

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 
    } 

Eine andere mögliche Lösung wäre, ein benutzerdefiniertes Layout für die ActionBar festzulegen. Obwohl ich befürworte, die UI/UX-Richtlinien zu befolgen und zu überprüfen, ob die Navigationsleiste in der sekundären Aktivität unbedingt erforderlich ist.

+0

Vielen Dank !! Es funktionierte! – raymondis