example - show action bar android
Establezca contentDescription para el botón de arriba de ActionBar (3)
Aquí cómo puedo hacer lo que necesita en un proyecto anterior:
((View) getWindow().getDecorView().findViewById(android.R.id.home).getParent().getParent()).setContentDescription("blablabla");
Usar el plugin viewHierarchy me ayuda a entender cómo se construye el diseño de ActionBar.
Estoy tratando de personalizar la contentDescription
predeterminada "Navegar hacia arriba" que está asociada con el botón de arriba de la ActionBar
de ActionBar
(estoy usando ActionBarSherlock).
De la fuente de ActionBarView
:
public void setHomeButtonEnabled(boolean enable) {
mHomeLayout.setEnabled(enable);
mHomeLayout.setFocusable(enable);
// Make sure the home button has an accurate content description for accessibility.
if (!enable) {
mHomeLayout.setContentDescription(null);
} else if ((mDisplayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
mHomeLayout.setContentDescription(mContext.getResources().getText(
R.string.abs__action_bar_up_description));
} else {
mHomeLayout.setContentDescription(mContext.getResources().getText(
R.string.abs__action_bar_home_description));
}
}
así que la clave sería cómo obtener una referencia a mHomeLayout
. getWindow().getDecorView().findViewById(android.R.id.home)
no funciona, ya que devuelve un ImageView.
¿Cómo podría hacerlo?
Gracias ;)
En caso de que alguien necesite establecer la descripción del contenido del botón de inicio de la barra de acciones para UIAutomator , use
((View) getWindow().getDecorView().findViewById(android.R.id.home).getParent()).setContentDescription("MANUALLYSET-home-up");
y acceda a la vista en su UIAutomatorTestCase usando
new UiObject(new UiSelector().description("MANUALLYSET-home-up").className("android.widget.FrameLayout"));
Por algún motivo, el * .getParent () adicional no funcionó, en su lugar, Android utiliza algún valor de descripción de contenido generado automáticamente para ese padre que puede diferir en algunas versiones de Android (por ejemplo, "nombre_aplicación, Cerrar el panel de navegación" en KITKAT y "nombre_aplicación, Navegue hacia arriba "en JELLYBEAN). El acceso a su hijo también funciona, afortunadamente.
Saludos cordiales
diseño
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/colorPrimary"
android:elevation="4dp"
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:layout_scrollFlags="scroll|enterAlways">
</android.support.v7.widget.Toolbar>
código
public Toolbar toolbar;
...
setContentView(layout);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(layoutTitle);
setSupportActionBar(toolbar);
...
getSupportActionBar().setHomeActionContentDescription("Go Back To XYZ Screen");