Tabs Deslizar dirección en la aplicación de Android de derecha a izquierda

Tengo una aplicación para Android que tiene pestañas. Quiero que la aplicación sea de derecha a izquierda.
Puse android: supportsRtl = "true" en el archivo de manifiesto, y cambió algunos de los elementos para ser android: layoutDirection = "rtl".

Cambia todo de derecha a izquierda, que es lo que quiero, excepto que invirtió la dirección de desplazamiento en las pestañas, cuando desliza hacia la izquierda, se mueve a la pestaña izquierda, en lugar del opuesto al golpe. Quiero cambiarlo para que sea un golpe regular.

Este es mi código:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="right" android:fitsSystemWindows="true" android:id="@+id/drawer_layout"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layoutDirection="rtl"> <include android:id="@+id/toolbar" android:gravity="right" layout="@layout/toolbar" /> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/main_layout" android:layout_below="@id/toolbar"> <com.refractored.PagerSlidingTabStrip android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:textColor="#ecf0f1" app:pstsShouldExpand="true"/> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" tools:context=".MainActivity" /> </LinearLayout> </RelativeLayout> <android.support.design.widget.NavigationView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:id="@+id/nav_view" android:layoutDirection="rtl" app:headerLayout="@layout/header" app:menu="@menu/nav_menu" /> </android.support.v4.widget.DrawerLayout> 

Espero que puedas ayudarme.

¡Gracias!

Yo añadí:

android:layoutDirection="ltr" a TabLayout .

NO

android:layoutDirection="rtl"

Y funcionó muy bien

Tuve el mismo problema porque mi aplicación funciona tanto en inglés como en hebreo. Esto es lo que hice:

  1. Establecer en las pestañas actividad android:layoutDirection="ltr" .

  2. En las pestañas actividad java – en onCreate trasladó a la última página si el idioma era hebreo.

  3. En la clase PlaceholderFragment , tanto en onCreateView como en getPageTitl comprueba si el idioma es hebreo y, de ser así, devuelve las vistas y el título en orden inverso.

Sé que la pregunta era en relación con rtl en general y no sólo hebreo, pero este cambio puede ser fácilmente implementado por cambiar la condición.

Aquí mi código completo de FinalTutorialActivity :

 package com.romsharony.finaltutorial; import android.support.design.widget.TabLayout; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import java.util.Locale; public class FinalTutorialActivity extends AppCompatActivity { /** * The {@link android.support.v4.view.PagerAdapter} that will provide * fragments for each of the sections. We use a * {@link FragmentPagerAdapter} derivative, which will keep every * loaded fragment in memory. If this becomes too memory intensive, it * may be best to switch to a * {@link android.support.v4.app.FragmentStatePagerAdapter}. */ private SectionsPagerAdapter mSectionsPagerAdapter; /** * The {@link ViewPager} that will host the section contents. */ private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_final_tutorial); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); // Create the adapter that will return a fragment for each of the three // primary sections of the activity. mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); // Set up the ViewPager with the sections adapter. mViewPager = (ViewPager) findViewById(R.id.container); mViewPager.setAdapter(mSectionsPagerAdapter); TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(mViewPager); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); // Go to last page if language is Hebrew if (Locale.getDefault().toString().equals("iw_IL") || Locale.getDefault().toString().equals("he_IL")) { mViewPager.setCurrentItem(2); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_final_tutorial, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /** * A placeholder fragment containing a simple view. */ public static class PlaceholderFragment extends Fragment { /** * The fragment argument representing the section number for this * fragment. */ private static final String ARG_SECTION_NUMBER = "section_number"; public PlaceholderFragment() { } /** * Returns a new instance of this fragment for the given section * number. */ public static PlaceholderFragment newInstance(int sectionNumber) { PlaceholderFragment fragment = new PlaceholderFragment(); Bundle args = new Bundle(); args.putInt(ARG_SECTION_NUMBER, sectionNumber); fragment.setArguments(args); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView; // If language is Hebrew return the pages in reverse direction if (Locale.getDefault().toString().equals("iw_IL") || Locale.getDefault().toString().equals("he_IL")) { switch (getArguments().getInt(ARG_SECTION_NUMBER)) { case 1: rootView = inflater.inflate(R.layout.page_three, container, false); break; case 2: rootView = inflater.inflate(R.layout.page_two, container, false); break; default: rootView = inflater.inflate(R.layout.page_one, container, false); } } else { switch (getArguments().getInt(ARG_SECTION_NUMBER)) { case 3: rootView = inflater.inflate(R.layout.page_three, container, false); break; case 2: rootView = inflater.inflate(R.layout.page_two, container, false); break; default: rootView = inflater.inflate(R.layout.page_one, container, false); } } return rootView; } } /** * A {@link FragmentPagerAdapter} that returns a fragment corresponding to * one of the sections/tabs/pages. */ public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { // getItem is called to instantiate the fragment for the given page. // Return a PlaceholderFragment (defined as a static inner class below). return PlaceholderFragment.newInstance(position + 1); } @Override public int getCount() { // Show 3 total pages. return 3; } @Override public CharSequence getPageTitle(int position) { // If language is Hebrew return the titles in reverse direction if (Locale.getDefault().toString().equals("iw_IL") || Locale.getDefault().toString().equals("he_IL")) { switch (position) { case 0: return getResources().getString(R.string.section_three); case 1: return getResources().getString(R.string.section_2); default: return getResources().getString(R.string.section_one); } } else { switch (position) { case 2: return getResources().getString(R.string.section_three); case 1: return getResources().getString(R.string.section_2); default: return getResources().getString(R.string.section_one); } } } } } 

Tengo el mismo problema. De acuerdo con esto parece que no hay una solución simple. Puede utilizar una de esas bibliotecas rtlViewPager –

  • Obtener "La aplicación no se inició (RuntimeError)" al intentar ejecutar pruebas calabash-android en el dispositivo
  • Programe la notificación usando el administrador de alarmas en formularios xamarin para android
  • ¿Cómo guardar una imagen en almacenamiento interno y luego mostrarla en otra actividad?
  • Reciclaje Bitmap no libera memoria
  • Xamarin: Android: System.UnauthorizedAccessException: se deniega el acceso a la ruta
  • Cambiar el fondo de la actividad del código
  • Simulaciones de desarrollo de Android de MonoDroid
  • Xamarin android support library v7 y v13 en la misma aplicación
  • Añadir Google Maps API v2 en Mono para Android
  • Targeting / Developing para múltiples plataformas móviles con un solo lenguaje de programación (C #)? ¿Coste-beneficio?
  • Xamarin no muestra la imagen de formularios: Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.