【问题标题】:tabMode="scrollable" not workingtabMode="scrollable" 不起作用
【发布时间】:2015-10-03 17:53:51
【问题描述】:

我正在使用来自 Android 设计支持库的 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 会导航到第二个选项卡,然后是第三个,依此类推。

  2. 向上导航在 Jellybean 和 Kitkat 设备中不起作用。如果我滑动工具栏,页面导航会发生 Tab 滚动(上述问题)。

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

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

【问题讨论】:

标签: android android-layout android-fragments


【解决方案1】:

也许您应该以编程方式设置该选项卡模式?尝试在TabLayaut 实例上调用setTabMode 方法 tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);

我不知道为什么它对你不起作用,但我在几周前测试了这些模式,对我来说,可滚动模式适用于所有 Android 版本。

还要检查你是否使用了最新版本的设计支持库,也许你使用了一些以前的错误版本?

【讨论】:

    【解决方案2】:

    要使 Tab 可滚动在 kitkat 和 Jelly bean 设备中工作,您可以参考本教程

    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

    它经过良好测试,适用于所有设备

    【讨论】:

    • 在 kitkat 和 Jelly bean 设备中,TabLayout 正在滚动并将我带到另一个布局。如果我单独滚动选项卡,则在棒棒糖中选项卡本身会滚动,但在其他设备中,选项卡会滚动并导航到其他页面。例如:如果 1,2..10 是选项卡名称,如果我在棒棒糖选项卡中滚动这些选项卡本身只是滚动它不会导航到其他布局,在其他设备中选项卡滚动并导航到第二个选项卡然后第三个选项卡和很快。知道可能是什么问题。
    • 我已经更新了我的源代码。我正在关注 androidhive.info/2015/09/… 的代码,示例来自 Android Studio,我从 Android Studio 复制并粘贴了文件并在 Eclipse 中创建,因为我的项目在 Eclipse 中。
    • 知道可能是什么问题以及在哪里检查代码。
    • 我会尝试使用该链接。
    • 我通过为标签布局“activity_scrollable_Tab.xml”添加 xmlns:app="schemas.android.com/apk/res-auto" 解决了这个问题。
    【解决方案3】:

    我的情况有些不同,我尝试的大多数答案都没有解决。

    答案是在您的android.support.design.widget.CoordinatorLayout 中添加xmlns:app="http://schemas.android.com/apk/res-auto"。

    我在这里发布完整的代码,

    <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 和棒棒糖中运行良好。

    【讨论】:

      【解决方案4】:

      请为您的 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" />
      

      【讨论】:

        【解决方案5】:

        您的 FragmentPagerAdapter 看起来有点奇怪,为什么要将片段添加到列表中?你有没有尝试添加

        adapter.notifyDataSetChanged();
        

        之前

        viewPager.setAdapter(adapter);
        

        在 setupViewPager 上?

        【讨论】:

          【解决方案6】:

          只是给像我这样的初学者一个温馨的提醒,它需要很多项目(超过屏幕宽度的大小)才能使其可滚动,所以如果你只测试两个项目,不要指望它可以滚动,这是与您可能正在寻找的“滚动切换选项卡”不同,tabMode="scrollable" 仅滚动而不切换。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-12-24
            • 2015-09-20
            • 2021-07-24
            • 2019-05-22
            • 2021-01-03
            • 1970-01-01
            • 1970-01-01
            • 2015-12-12
            相关资源
            最近更新 更多