在Android的TabLayout中隐藏选项卡

15

很遗憾,关于如何在android.support.design.widget.TabLayout中隐藏标签的问题没有得到答案

其他问题都是使用TabHost创建的,我不想改变我的代码。

我想隐藏标签“Three”。

enter image description here


碎片:

viewPager = (ViewPager) rootView.findViewById(R.id.search_viewPager);
viewPager.addOnPageChangeListener(viewPagerListener);
viewPager.setAdapter(adapter);
tabLayout = (TabLayout) rootView.findViewById(R.id.search_tabs);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.setupWithViewPager(viewPager);

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:background="@color/white"
android:orientation="vertical">

    <android.support.design.widget.TabLayout
    android:id="@+id/search_tabs"
    style="@style/TabLayoutStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:elevation="1dp" />

    <android.support.v4.view.ViewPager
    android:id="@+id/search_viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true" />

</LinearLayout>

1
你能否提供你查看过的其他问题的链接,并解释为什么那个解决方案对你不起作用?这可能是一个重复的问题,或者需要更多的解释来进行调整。 - AdamMc331
1
请分享源代码。 - ddb
1
没有适用的代码,无法提供任何建议。 - BR89
1
请分享添加选项卡到TabLayout的源代码。 - ddb
嗨,ViewPager有一个带有我的元素的适配器(列表),因此当我将适配器添加到ViewPager中,再将ViewPager添加到选项卡中时,选项卡会自动获得与适配器中元素数量相同的选项卡。 - Ina Bertolini
7个回答

21
您可以通过 tablayout.getTabAt(int index) 访问 TabLayout 的 TabView,并将其转换为 LinearLayout,以便您可以将其可见性设置为 GONE。

((LinearLayout) tabLayout.getTabAt(0).view).setVisibility(View.GONE);


9
 //To hide the first tab 
 ((ViewGroup) tabLayout.getChildAt(0)).getChildAt(0).setVisibility(View.GONE);
 //Set the next  tab as selected tab
 TabLayout.Tab tab = tabLayout.getTabAt(1);
 tab.select(); 

1
这不是正确的方法,也行不通。 - Cyph3rCod3r
1
它在我的情况下有效。谢谢。只是在这里处理空指针异常。 - Ritesh Adulkar

4
修改您传递给viewpager的adaterList:删除第三个元素“Three”,这样它就会消失。
编辑:
当第三个选项卡应该出现时,只需更新adapterList/viewPager即可。您可以通过学习this来获得一些想法。

1
抱歉,这不是我想要的。搜索有三种不同的类型,其中两种在应用程序中,第三种只应在另外两种没有结果时出现,就像网页搜索一样。 我真的希望在我的应用程序中尽可能隐藏这个选项,因为其他两个选项可以找到。 这就是我想要隐藏而不是删除该标签的原因。 - Ina Bertolini
1
当第三个选项卡应该出现时,只需更新adapterList/viewPager即可。您可以通过研究此链接来获得一些想法:https://dev59.com/EWgv5IYBdhLWcg3wF9BP - ddb

4
如果你想保存之前的视图(如果在选项卡项内使用了任何自定义视图):
View view=tab_layout.getTabAt(3).getCustomView();

移除索引为idx(例如索引2)的标签:

tab_layout.removeTabAt(idx);

要恢复该选项卡,请使用:

tab_layout.addTab(tab_layout.newTab().setCustomView(view));

2
在 Kotlin 中,您可以按照以下方式定义 TabLayoutMediator 后隐藏选项卡。
TabLayoutMediator(
        tabLayout,
        viewPager
    ) { tab, position ->
        tab.text = when (position) {
            // define tab titles
        }
    }.attach()    

((tabLayout.getTabAt(position)?.view))?.isVisible = false

这是正确的方式。 - lasec0203

1
我建议您使用下面的代码。
var tabLayout = FindViewById<TabLayout>(YOUR_TAB_LAYOUT_ID);
tabLayout.SetupWithViewPager(YOUR_CUSTOM_VIEWPAGER);

**tabLayout.GetTabAt(0).View.Visibility = ViewStates.Gone;**

要实现这一点,只需将虚拟选项卡插入索引0即可。您可以在自定义的ViewPager适配器中执行此操作。以下是代码。

adapter.addFragment(Fragmetn.NewInstance(), "none");

0

这适用于

 ((LinearLayout) Objects.requireNonNull(tabLayout.getTabAt(1)).view).setVisibility(View.INVISIBLE);

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