¿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).
- Cambiar EditText setError gravedad dibujable
- Cómo especificar RTL específica drawables
- La pantalla parpadea cuando se ejecuta en Android 4.2. (La actividad se reinicia continuamente)
- Bidi Derecho a Izquierda Idioma en Firemonkey Mobile
- Android context.getResources.updateConfiguration () desaprobado
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); }
- Establecer LayoutDirection (RTL) para api inferior a 17
- El proyecto hace referencia a los atributos de RTL, pero no activa o desactiva explícitamente el soporte RTL
- Alineación derecha de Android TextView en un dispositivo de derecha a izquierda
- Cadena RTL hebrea de Android con valor numérico volteado
- Comportamiento incorrecto de los parámetros RTL hack con android 4.2.2
- Anular los soportesRtl en uno de los diseños
- ¿Cómo puedo forzar mi aplicación Android a ejecutar sólo con RTL layout directon?
- Cómo hacer que el texto se oriente de derecha a izquierda
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
- Dependencia no resuelta: com.hanhuy.sbt # android-sdk-plugin; 1.3.19: no encontrado
- Android – ¿Por qué debería implementar la interfaz mientras se comunica entre la actividad principal y el fragmento