TabLayout的不同tabMode

8

我正在使用ViewPager和TabLayout。如果选项卡可以放置在显示tabMode上,则它们必须是:

app:tabMode="fixed"

否则

app:tabMode="scrollable"

我该怎么做?

6
你的问题是什么? - ticofab
可能是重复的问题: https://dev59.com/xV0a5IYBdhLWcg3wLWGx - issamux
可能的答案:https://dev59.com/xV0a5IYBdhLWcg3wLWGx#31363030 - issamux
5个回答

7

我没有理解你的问题,但我可以帮助你。如果选项卡数量是静态或固定的(即你知道选项卡的数量),则使用app:tabMode="fixed";如果选项卡数量是动态的(即数据来自于源),则使用app:tabMode="scrollable"


5

我们可以在TabLayout中使用两种tabModes:

app:tabMode="fixed"
app:tabMode="scrollable"

从程序角度来看,它就像是

 tabLayout.setTabMode(TabLayout. MODE_FIXED);
tabLayout.setTabMode(TabLayout. MODE_SCROLLABLE);

对于MODE_SCROLLABLE,以上内容相同。

要理解TabLayout的模式,请参考以下链接:https://developer.android.com/reference/android/support/design/widget/TabLayout


2
在xml布局中,我声明了“fixed”,并在片段Java类中进行了如下操作:
    if (tabLayout == null) {
        tabLayout = (TabLayout) view.findViewById(R.id.tabs);

        DisplayMetrics metrics = new DisplayMetrics();
        WindowManager wm = (WindowManager) view.getContext().getSystemService(Context.WINDOW_SERVICE);
        wm.getDefaultDisplay().getMetrics(metrics);

        int width = metrics.widthPixels;
        int height = metrics.heightPixels;
        double wi = (double) width / (double) metrics.xdpi;
        double hi = (double) height / (double) metrics.ydpi;
        double x = Math.pow(wi, 2);
        double y = Math.pow(hi, 2);
        double screenInches = Math.sqrt(x + y);

        if (screenInches < 4) {
            tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
        }
    }

1
如果问题是某些屏幕配置(例如小屏幕,纵向配置等)需要滚动选项卡,因为它们不适合屏幕,而对于其他屏幕配置/大小,选项卡的数量完全适合屏幕,您可以使用资源限定符为不同的屏幕配置/大小定义不同的选项卡。
举个例子,假设您的选项卡在纵向上不适合但在横向上适合。因此,人们可能希望在纵向上使用“可滚动”选项卡,在横向上使用“固定”选项卡。
“res/layout/tabs.xml”将包含用于纵向的“TablLayout”:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.TabLayout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/tabs"
    app:tabMode="scrollable"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

同时,res/layout-land/tabs.xml 中包含用于横屏的 TabLayout

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.TabLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

然后在包含选项卡的布局中,只需像这样包含它:

<include layout="@layout/tabs" />

希望这就是你要找的内容。

1
我没有理解你的问题,但是在Android文档中有给出答案。
当您应该使用app:tabMode="fixed"或app:tabMode="scrollable"
1. tabMode="fixed" 固定标签同时显示所有标签,最适合用于需要快速切换标签的内容。 2. app:tabMode="scrollable" 可滚动标签在任何给定时刻显示一部分标签,并且可以包含更长的标签标签和更多的标签。它们最适合于触摸界面中的浏览上下文,当用户不需要直接比较标签标签时使用。此模式通常与ViewPager一起使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接