android - transparente - Obtener la referencia de la vista del icono de navegación de la barra Google
widget barra busqueda google android (3)
Después de examinar las vistas secundarias de la barra de herramientas en el modo de depuración, vi que el ícono del cajón se puede encontrar allí, como un ImageButton. (Gracias Elltz)
Utilizo una barra de herramientas con diseño xml personalizado con 2 hijos (LinearLayout e ImageView), por lo que mi barra de herramientas tuvo 4 hijos al final, con estas posiciones:
[0] LinearLayout(from custom xml)
[1] ImageView(from custom xml)
[2] ImageButton(drawer icon)
[3] ActionMenuView(menu icon)
Sabiendo esto, ahora puedo usar:
View drawerIcon = toolbar.getChildAt(2);
para obtener una referencia al ícono de menú del cajón. En mi caso, la posición es 2. Esta posición debe ser igual a la cantidad de vistas secundarias en el diseño personalizado de la barra de herramientas.
Si alguien encuentra una mejor solución, por favor avíseme.
Me gustaría destacar el ícono del cajón en mi Toolbar
(trabajando en un tutorial). Para eso, necesito su posición. ¿Cómo obtengo una referencia a la vista del icono de navegación del cajón (hamburguesa)?
Si solo desea que el Drawable
represente el ícono de navegación de la barra de herramientas, puede hacer esto:
Drawable d = mToolbar.getNavigationIcon();
Puede obtener una referencia al ImageButton utilizado para el icono de navegación de la barra de herramientas mediante un método como este:
public ImageButton getToolbarNavigationButton() {
int size = mToolbar.getChildCount();
for (int i = 0; i < size; i++) {
View child = mToolbar.getChildAt(i);
if (child instanceof ImageButton) {
ImageButton btn = (ImageButton) child;
if (btn.getDrawable() == mToolbar.getNavigationIcon()) {
return btn;
}
}
}
return null;
}
Puede hacer uso de la descripción de contenido de la vista y luego usar el método findViewWithText()
para obtener una referencia de visualización
public static View getToolbarNavigationIcon(Toolbar toolbar){
//check if contentDescription previously was set
boolean hadContentDescription = TextUtils.isEmpty(toolbar.getNavigationContentDescription());
String contentDescription = !hadContentDescription ? toolbar.getNavigationContentDescription() : "navigationIcon";
toolbar.setNavigationContentDescription(contentDescription);
ArrayList<View> potentialViews = new ArrayList<View>();
//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 setNavigationContentDescription ensures its existence
View navIcon = null;
if(potentialViews.size() > 0){
navIcon = potentialViews.get(0); //navigation icon is ImageButton
}
//Clear content description if not previously present
if(hadContentDescription)
toolbar.setNavigationContentDescription(null);
return navIcon;
}