我正在使用TabLayout和viewPager,其中有一个选项可以向左或向右滑动viewPager,以便在页面之间导航。
我的问题是,我的应用程序是基于RTL的(从右到左),滑动方向是相反的。
我正在尝试将滑动方向从默认更改为反向版本。我在网上搜索了很多,但没有找到一种方法。
我使用的是android.support.v4.view.ViewPager;
这就是我如何用viewPager初始化我的TabLayout:
// View Page Adapter
final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
final PagerAdapter adapter = new PagerAdapter
(getSupportFragmentManager(), tabLayout.getTabCount());
//View Page Adapter Configuration
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
viewPager.setOffscreenPageLimit(3);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
总结:目前,当我向左滑动viewPager时,它会显示下一页。在RTL中,当你向右滑动viewPager时,它会显示下一页。
这可能很难理解,但在这里。向右滑动显示下一页
而我需要向右滑动才能显示上一页。
6条答案
按热度按时间bqujaahr1#
更改Viewpager的滑动方向是一种非常简单的技术。
有两个简单步骤必须遵循你,
**1.**更改“视图”页导航的循环,
**2.**然后再次更改适配器中每个项目视图的方向,
这是100%为我工作。
hgqdbh6s2#
一个月前我也遇到过同样的问题,但我想我找到了一个很好的解决方案。
1.在xml中将TabLayout方向更改为ltr:
1.为ViewPager创建自定义适配器并覆盖方法
getItem(int position)
和getPageTitle(int position)
:1.将适配器设置为ViewPager,然后将此ViewPager应用于TabLayout。
2o7dmzc53#
我知道这是晚了,但这是一个聪明的问题。正如@CommonsWare所说,这是在页面适配器的getItem()方法中颠倒项目顺序的问题。但这是不够的。当你在getitem()方法中颠倒顺序时,你也不应该在getPageTitle()方法中颠倒顺序。类似这样:
现在来了棘手的部分。你应该使用这个简单的方法,转换基于零的索引顺序使用最大索引和当前索引反向。
则应该在onTabSelected()中使用此方法,如下所示:请注意,您应该使用自己max索引:
第二部分是更改页面适配器上页面侦听器。同样,您应该使用自己的最大索引号:
我试着尽我所能地描述。希望这对我有帮助:)
nhaq1z214#
如果您使用的是带有片段的viewpager2,则可以使用。
我希望这能帮助到一些人。
pgvzfuti5#
您可以使用ViewPager2,它支持从右到左的方向。使之成为可能:
1.在应用清单中添加android:supportsRtl ="true"
1.将viewpager2的父视图组布局方向设为ltr(android:layoutDirection ="ltr")
1.现在设置viewpager2的布局方向ltr(android:layoutDirection ="rtl")
1.同时将适配器的布局设置为layoutDirection ltr(android:layoutDirection ="ltr")
dzjeubhm6#
因此,我发现对ViewPager(1)来说,最简单的方法就是反转项目数组,然后在显示之前将页面调度器的当前项目设置在[array size]位置。