我正在使用Android Design支持库中的TabLayout。我正在使用材料设计主题。以下是代码
activity_scrollable_Tab.xml
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="scrollable"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
scrollableTabActivity.java
public class ScrollableTabsActivity extends AppCompatActivity {
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scrollable_tabs);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(new OneFragment(), "ONE");
adapter.addFrag(new TwoFragment(), "TWO");
.....
adapter.addFrag(new TenFragment(), "TEN");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFrag(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
}
标签滚动在Lollipop中有效。但是相同的代码不适用于Kitkat和Jelly bean设备。在Kitkat和Jelly bean设备上,我面临两个问题,
当我滚动Tab时,Tab在Jellybean和kitkat设备中滚动浏览页面导航,但在Lollipop Tab中单独滚动并且它是工作文件。例如:如果1,2,3..10是Tab,如果我滚动Tab,它会滚动并为每个滚动导航布局。如果我滚动,Tab会导航到第二个标签,然后是第三个,依此类推。
向上导航在Jellybean和Kitkat设备中无效。如果我滑动工具栏,则会在页面导航中发生选项卡滚动(上述问题)。
任何人都可以告诉我可能是什么问题以及我需要检查和排序的部分。如果向我提供电子邮件以便更好地了解问题,我可以发送APK文件。
我是android的新手,需要一些帮助来解决这个问题。
答案 0 :(得分:3)
也许您应该以编程方式设置该标签模式?尝试在setTabMode
实例上调用TabLayaut
方法
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
我不知道为什么它对你不起作用,但几周前我测试了这些模式,对我来说,可滚动模式适用于所有Android版本。
另外,请检查您是否使用最新版本的设计支持库,或许您使用了之前的一些错误版本?
答案 1 :(得分:2)
要在kitkat和Jelly bean设备中使Tab可滚动工作,您可以参考本教程
http://www.android4devs.com/2015/01/how-to-make-material-design-sliding-tabs.html
经过充分测试并在所有设备上为我工作
答案 2 :(得分:2)
我的情况有些不同,我试过的大部分答案都没有解决。
答案是在xmlns:app="http://schemas.android.com/apk/res-auto"
中添加android.support.design.widget.CoordinatorLayout
。
我在这里发布完整的代码,
<android.support.design.widget.CoordinatorLayout 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.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="scrollable"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
在我的TabLayout xml文件中添加xmlns:app="http://schemas.android.com/apk/res-auto"
后,Tab滚动功能在Jelly bean,Kitkat和棒棒糖中正常工作。
答案 3 :(得分:0)
请为 TabLayout 尝试以下xml。
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
app:tabMode="scrollable" />
答案 4 :(得分:0)
你的FragmentPagerAdapter看起来有点奇怪,你为什么要把你的片段添加到List?你有没有尝试添加
adapter.notifyDataSetChanged();
前
viewPager.setAdapter(adapter);
在setupViewPager上?
答案 5 :(得分:0)
只是像我这样的初学者一个温馨的提醒,它需要很多项(超过屏幕宽度的大小)才能滚动,所以如果只测试两个项目,不要指望它能够滚动,这是与您可能要寻找的“滚动到切换标签”不同,tabMode =“ scrollable”仅滚动而不切换。