Android 设计库TabLayout,滚动后选项卡指示器反弹
编辑最新设计库修复了此问题Android 设计库TabLayout,滚动后选项卡指示器反弹,android,android-tabs,android-design-library,Android,Android Tabs,Android Design Library,编辑最新设计库修复了此问题 我在两个实例中使用表格布局,PagerAdapter和FragmentStatePagerAdapter。在这两种情况下,标签指示器在页面之间滑动时会反弹。单击选项卡以更改页面时,选项卡指示器不会反弹 我不确定这是否是我的错误,这是一个已知的问题,或是指南的一部分。如果您需要更多的代码,或者其他示例,我将发布它 FragmentStatePagerAdapter mViewPager.setAdapter(new FragmentStatePagerAda
我在两个实例中使用表格布局,PagerAdapter和FragmentStatePagerAdapter。在这两种情况下,标签指示器在页面之间滑动时会反弹。单击选项卡以更改页面时,选项卡指示器不会反弹 我不确定这是否是我的错误,这是一个已知的问题,或是指南的一部分。如果您需要更多的代码,或者其他示例,我将发布它 FragmentStatePagerAdapter
mViewPager.setAdapter(new FragmentStatePagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
LogMeal log = mLogMealAdapter.getItem(position);
return MealViewFragment.newInstance(log.getId());
}
@Override
public CharSequence getPageTitle(int position) { // Tab text
LogMeal logMeal1 = mLogMealAdapter.getItem(position);
String s;
if (logMeal1.getMealName().toString().trim().length() > 12) {
s = logMeal1.getMealName().substring(0, 12) + "..";
} else {
s = logMeal1.getMealName();
}
return s;
}
@Override
public int getCount() {
return mLogMealAdapter.getCount();
}
});
tabs.setTabTextColors(Color.parseColor("#80ffffff"), Color.parseColor("#ffffff"));
if (mLogMealAdapter.getCount() == 1) {
tabs.setTabMode(TabLayout.MODE_FIXED);
} else {
tabs.setTabMode(TabLayout.MODE_SCROLLABLE);
}
tabs.setupWithViewPager(mViewPager);
mViewPager.setCurrentItem(position);
XML
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_meal_view"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="@color/primary"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_below="@+id/toolbar_meal_view"
android:background="@color/primary"
android:theme="@style/ToolbarTheme"/>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tabs"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="10dp"
android:layout_below="@+id/tabs"
android:background="@drawable/toolbar_shadow"/>
</RelativeLayout>
这是设计支持库22.2.0中的一个错误 也许会修好的。
我最近也有类似的问题。
我的解决方法: 1) 更改
tabs.setupWithViewPager(mviewpage)代码>用于
\\ use own OnPageChangeListener
mViewPager.addOnPageChangeListener(new MyPageScrollListener(mTabLayout));
\\ Manually add tabs, for example:
mTabLayout.addTab(mTabLayout.newTab().setText(mViewPager.getAdapter().getPageTitle(0)));
mTabLayout.addTab(mTabLayout.newTab().setText(mViewPager.getAdapter().getPageTitle(1)));
\\ use own OnTabSelectedListener
mTabLayout.setOnTabSelectedListener(new MyOnTabSelectedListener());
2) 添加自定义侦听器的实现
private class MyPageScrollListener implements ViewPager.OnPageChangeListener {
private TabLayout mTabLayout;
public MyPageScrollListener(TabLayout tabLayout) {
this.mTabLayout = tabLayout;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if(mTabLayout != null) {
mTabLayout.getTabAt(position).select();
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
}
private class MyOnTabSelectedListener implements TabLayout.OnTabSelectedListener {
@Override
public void onTabSelected(TabLayout.Tab tab) {
int position = tab.getPosition();
if (mViewPager.getCurrentItem() != position) {
mViewPager.setCurrentItem(position, true);
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
}
我希望它能有所帮助。指示器“弹跳”错误已在版本和更高版本中修复
只需更新您的build.gradle
:
dependencies {
//...
compile 'com.android.support:design:22.2.1'
}
嘿,对不起,没有回复你。我现在就测试一下,然后再给你回复!谢谢你,很抱歉没有早点回来。