Eli*_*ran 6 android android-viewpager android-tablayout
我正在使用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());
}
Run Code Online (Sandbox Code Playgroud)
简介:目前,当我向左滑动viewPager时,它会显示下一页.在RTL中,当您向右滑动viewPager时,它会显示下一页.
这可能很难理解,但在这里. 向右滑动即可显示下一页
我需要向右滑动以显示上一页.
Ama*_*TeR 18
更改Viewpager的滑动方向是非常简单的技术.
有两个简单的步骤,必须跟着你,
1.更改View寻呼机的旋转,
viewpager.setRotationY(180);
Run Code Online (Sandbox Code Playgroud)
2.然后再次改变作为viewpager的子代的片段容器的方向,
recyclerView.setRotationY(180);
Run Code Online (Sandbox Code Playgroud)
注意:在我的情况下,我使用了recyclerview作为视图寻呼机的子节点.
这100%为我工作.
小智 10
我在一个月前面临同样的问题,但我认为我找到了一个很好的解决方案.1)将您的TabLayout方向更改为xml中的ltr:
<android.support.design.widget.TabLayout
android:id="@+id/tl_activity_main"
android:layout_below="@id/toolbar_activity_main"
android:layoutDirection="ltr"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/DisionTabLayout" />
Run Code Online (Sandbox Code Playgroud)
2)为ViewPager创建自定义适配器并覆盖方法getItem(int position)和getPageTitle(int position):
@Override
public Fragment getItem(int position) {
if (mIsRtlOrientation && mTabs != null && mTabs.length > 0) {
return mTabs[mTabs.length - position - 1].getFragment();
} else {
return mTabs[position].getFragment();
}
}
@Override
public int getCount() {
return mTabs.length;
}
@Override
public CharSequence getPageTitle(int position) {
if (mIsRtlOrientation && mTabs != null && mTabs.length > 0) {
return mTabs[mTabs.length - position - 1].getTitle();
} else {
return mTabs[position].getTitle();
}
}
Run Code Online (Sandbox Code Playgroud)
3)将适配器设置为ViewPager,然后将此ViewPager应用于TabLayout.
private void setAdapters() {
// initialize adapter
mTabsAdapter = new TabsAdapter(getSupportFragmentManager(), mTabs, true);
// set adapter to ViewPager
vp.setAdapter(mTabsAdapter);
// set ViewPager to TabLayout
tl.setupWithViewPager(vp);
// if RTL orientation, go to last item
vp.setCurrentItem(vp.getAdapter().getCount() - 1, false);
}
Run Code Online (Sandbox Code Playgroud)
4)我创建了一篇博文,其中包含更多详细信息和完整代码 - 此处
我知道已经晚了,但这是一个聪明的问题。正如@CommonsWare所说,这是颠倒页面适配器中的 getItem() 方法中的项目顺序的问题。但这还不够。当您颠倒 getitem() 方法中的顺序时,您也不应该颠倒 getPageTitle() 方法中的顺序。像这样的东西:
public static class AppSectionsPagerAdapter extends FragmentStatePagerAdapter {
public AppSectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new page1();
case 1:
return new page2();
case 2:
return new page3();
}
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "page 3 title";
case 1:
return "page 2 title";
case 2:
return "page 1 title";
}
}
@Override
public int getCount() {
return 3;
}
}
Run Code Online (Sandbox Code Playgroud)
现在是棘手的部分。您应该使用这个简单的方法,该方法使用最大索引和当前索引反转从零开始的索引顺序。
public int calculateReverse(int maxIndex,int currentIndex){
return maxIndex-currentIndex;
}
Run Code Online (Sandbox Code Playgroud)
您应该在 onTabSelected() 中使用此方法,如下所示:请注意,您应该使用自己的最大索引:
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
mViewPager.setCurrentItem(calculateReverse(2,tab.getPosition()));
}
Run Code Online (Sandbox Code Playgroud)
第二部分是更改页面适配器上的页面侦听器。您应该再次使用您自己的最大索引号:
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(calculateReverse(2,position)); // reversing the tab selection
}
});
Run Code Online (Sandbox Code Playgroud)
我试图尽可能地进行描述。希望这可以帮助 :)
| 归档时间: |
|
| 查看次数: |
9820 次 |
| 最近记录: |