¿Cómo obtener el botón "arriba" utilizado en la barra de herramientas?

Esta es una pregunta corta:

Estoy tratando de forzar la barra de acción (utilizada por una barra de herramientas) para utilizar la alineación LTR. He conseguido hacer el diseño en sí mismo uso LTR, pero no el botón "arriba" (como he hecho aquí , antes de la barra de herramientas se introdujo).

Parece que esta vista no tiene un ID, y creo que usar getChildAt () es demasiado arriesgado.

¿Alguien puede ayudar?


La respuesta

Aquí hay una manera que he encontrado para resolver esto, basado en esta respuesta .

Lo hice de modo que se garantiza encontrar sólo el botón "arriba", y lo que haga, volverá al estado anterior que era antes.

Aquí está el código:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) @Override public boolean onCreateOptionsMenu(final Menu menu) { // <= do the normal stuff of action bar menu preparetions if(VERSION.SDK_INT>=VERSION_CODES.JELLY_BEAN_MR1&&getResources().getConfiguration().getLayoutDirection()==View.LAYOUT_DIRECTION_RTL) { final ArrayList<View> outViews=new ArrayList<>(); final CharSequence previousDesc=_toolbar.getNavigationContentDescription(); for(int id=0;;++id) { final String uniqueContentDescription=Integer.toString(id); _toolbar.findViewsWithText(outViews,uniqueContentDescription,View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); if(!outViews.isEmpty()) continue; _toolbar.setNavigationContentDescription(uniqueContentDescription); _toolbar.findViewsWithText(outViews,uniqueContentDescription,View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); if (outViews.isEmpty()) if (BuildConfig.DEBUG) throw new RuntimeException( "You should call this function only when the toolbar already has views"); else break; outViews.get(0).setRotation(180f); break; } _toolbar.setNavigationContentDescription(previousDesc); } // return super.onCreateOptionsMenu(menu); } 

Parece que esta vista no tiene un ID

Tienes razón, la vista de navegación se crea mediante programación y nunca establece un id. Pero todavía puede encontrarlo utilizando View.findViewsWithText .

View.findViewsWithText viene con dos banderas:

  • View.FIND_VIEWS_WITH_TEXT

  • View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION

La descripción de contenido predeterminada de la vista de navegación es "Navegar hacia arriba" o el identificador de recursos es abc_action_bar_up_description para AppCompat y action_bar_up_description para el marco, pero puede aplicar fácilmente su propio uso de Toolbar.setNavigationContentDescription .

He aquí un ejemplo de implementación:

 final Toolbar toolbar = ...; toolbar.setNavigationContentDescription("up"); setActionBar(toolbar); final ArrayList<View> outViews = Lists.newArrayList(); toolbar.findViewsWithText(outViews, "up", View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); outViews.get(0).setRotation(180f); 

Resultados

ejemplo

  • La dirección del diseño cambia RTL LTR
  • ¿Cómo posiciono el cursor a la derecha en EditText
  • ¿Cómo hago que Android utilice un archivo de recursos calificado sólo en dispositivos antiguos?
  • cómo cambiar la dirección del título de CollapsingToolbarLayout?
  • Cambie la dirección de ActionBar
  • Android: El botón de navegación muestra el lado equivocado cuando la dirección de diseño es RTL
  • Identificar el idioma RTL en Android
  • Desarrollo de una aplicación de Android de derecha a izquierda
  • ¿Cómo funciona rtl con vista personalizada o lienzo en andorid
  • Elemento de crecimiento de RecyclerView de derecha a izquierda
  • Espejo de diseño automático en la configuración de derecha a izquierda con piruleta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.