tabMode ="可滚动"不工作

时间:2015-10-03 17:53:51

标签: android android-layout android-fragments

我正在使用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设备上,我面临两个问题,

  1. 当我滚动Tab时,Tab在Jellybean和kitkat设备中滚动浏览页面导航,但在Lollipop Tab中单独滚动并且它是工作文件。例如:如果1,2,3..10是Tab,如果我滚动Tab,它会滚动并为每个滚动导航布局。如果我滚动,Tab会导航到第二个标签,然后是第三个,依此类推。

  2. 向上导航在Jellybean和Kitkat设备中无效。如果我滑动工具栏,则会在页面导航中发生选项卡滚动(上述问题)。

  3. 任何人都可以告诉我可能是什么问题以及我需要检查和排序的部分。如果向我提供电子邮件以便更好地了解问题,我可以发送APK文件。

    我是android的新手,需要一些帮助来解决这个问题。

6 个答案:

答案 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

谷歌文档也在这里 https://developer.android.com/samples/SlidingTabsBasic/src/com.example.android.common/view/SlidingTabLayout.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”仅滚动而不切换。