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 Toolbar
s 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
.