Sé que esta pregunta puede parecer duplicada, pero no pude encontrar una buena solución para mi problema. Estoy usando tablayout con viewpager con fragmentPagerAdapter como adaptador de viewpager. Como sabe, viewpager no admite el diseño rtl, por lo que tengo problemas en las configuraciones regionales rtl. Quiero que las pestañas comiencen desde derecha (la primera pestaña se pega al lado derecho de la pantalla) y el usuario puede deslizar correctamente. ¿Cómo puedo hacer esto? ¿Alguna ayuda?

0
Mkhakpaki 19 oct. 2017 a las 14:21

3 respuestas

La mejor respuesta

Buenas noticias chicos :). Android agregó recientemente un nuevo componente de interfaz de usuario llamado ViewPager2 .

https://developer.android.com/jetpack/androidx/releases/viewpager2

A continuación encontrará el código y los enlaces:

dependencies {
    implementation "androidx.viewpager2:viewpager2:1.0.0"
}

Mejoras de la implementación anterior de ViewPager:

  • Soporte de diseño RTL (de derecha a izquierda)
  • Soporte de orientación vertical
  • Soporte confiable de Fragment (incluyendo el manejo de cambios a la colección de Fragment subyacente)
  • Animaciones de cambio de conjunto de datos (incluido el soporte DiffUtil)

El siguiente enlace explica la guía de migración de ViewPager a ViewPager2:

https://developer.android.com/training/animation/vp2-migration

También tenemos un ejemplo de demostración:

https://github.com/android/views-widgets-samples/tree/master/ViewPager2

4
Alok Gupta 2 ene. 2020 a las 06:02

La mejor solución sería rotar el visor a 180:

mViewPager.setRotationY(180); //rotate the viewpager

Luego, gire la vista interna que contiene el contenido de la pestaña para tablayout (para revertir el efecto en el contenido). Un ejemplo en el caso de una vista de texto:

if (textView.getRotationY() != 180) {
    textView.setRotationY(180);
 }

Para PagerTabStrip, también debe girar 180 las 3 pestañas visibles:

PagerTabStrip pt= container.findViewById(R.id.pager_tab_strip);
 pt.getChildAt(0).setRotationY(180);
 pt.getChildAt(1).setRotationY(180);
 pt.getChildAt(2).setRotationY(180);

Eso funcionó para mí en una aplicación árabe. Debería funcionar también para cualquier configuración regional rtl.

6
Ali Akbarpour 23 mar. 2018 a las 18:45

He enfrentado este caso antes y hay 2 soluciones

1- supongamos que tiene 4 fragmentos F1, F2, F3 y F4, ahora debe buscar todos los fragmentos en el adaptador a la inversa, ya que F4, F3, F2 y F1, una vez que cargue sus fragmentos, el fragmento seleccionado es = pager.setCurrentItem (Titles.length - 1);

Y asegúrese de revertir los títulos también.

La segunda solución es usar un visor personalizado como

RTL view pager

Espero que manejes esto

2
AbuQauod 19 feb. 2018 a las 12:19