2015-02-02 5 views
9

Ich verwende ShowcaseView Bibliothek für App-Tutorial. Ich brauche einen Verweis auf Navigationsleiste Umschaltknopf zu bekommen (auch bekannt als "Burger Button"):Verweis auf Schubladenwechsel in Support-Aktionsleiste

enter image description here

I Toolbar als ActionBar verwenden, und ich habe keine Ahnung, wie diese Schaltfläche zu erhalten. Normalerweise zu wechseln Schublade Ich benutze diese:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
     if (item.getItemId() == android.R.id.home) { 
      toggleDrawer(Gravity.START); 
     } 
} 

Aber wenn ich Device Monitor verwenden Schnappschuss des Bildschirms zu machen, gibt es keine Ansicht mit der ID „zu Hause“.

Irgendwelche Vorschläge?

Antwort

19

In der ursprünglichen ActionBar die beiden View s häufig auf der linken Seite gezeigt sind die UpView und die StartseiteView. Die UpView ist die Schaltfläche, die normalerweise das "Hamburger" -Symbol anzeigt, während die HomeView das App-Symbol anzeigt. Die Dinge haben sich mit der Toolbar Klasse geändert. Es gibt nicht mehr einen Standard View mit der android.R.id.home ID, aber die Einstellung Toolbar als Unterstützung ActionBar wird immer noch die onOptionsItemSelected() mit der entsprechenden Artikel-ID, wenn der betreffenden View geklickt wird.

Die aktuelle Toolbar Klasse bezieht sich nun auf die UpView intern als Nav-TasteView, und es schafft, dass View dynamisch. Ich habe zwei verschiedene Methoden verwendet, um einen Verweis darauf zu erhalten - eine, die über eine Toolbars Kind View s iteriert, und eine, die Reflexion an der Toolbar Klasse verwendet.

Für die iterativen Verfahren, nachdem Sie den Toggle festgelegt haben, aber bevor Sie irgendwelche anderen ImageButton s zum Toolbar hinzugefügt haben, die Nav-TasteView ist das einzige ImageButton Kind der Toolbar, die Sie bekommen können etwa so:

private ImageButton getNavButtonView(Toolbar toolbar) 
{ 
    for (int i = 0; i < toolbar.getChildCount(); i++) 
     if(toolbar.getChildAt(i) instanceof ImageButton) 
      return (ImageButton) toolbar.getChildAt(i); 

    return null; 
} 

Wenn Sie einen Verweis auf das App-Symbol des View müssen - das, was auf die alten Startseite entsprichtView - Sie eine ähnliche Methode für ein ImageView suchen können. Die reflektierende Methode kann andererseits jederzeit verwendet werden, nachdem die View auf die Toolbar gesetzt wurde.

private ImageButton getNavButtonView(Toolbar toolbar) { 
    try { 
     Class<?> toolbarClass = Toolbar.class; 
     Field navButtonField = toolbarClass.getDeclaredField("mNavButtonView"); 
     navButtonField.setAccessible(true); 
     ImageButton navButtonView = (ImageButton) navButtonField.get(toolbar); 

     return navButtonView; 
    } 
    catch (NoSuchFieldException | IllegalAccessException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

Wieder ein ähnliches Verfahren kann für das View Symbol verwendet werden, Abrufen anstelle der "mLogoView"Field.