【问题标题】:Hide Tab in Tablayout Android在 Tablayout Android 中隐藏选项卡
【发布时间】:2016-11-11 02:16:41
【问题描述】:

不幸的是 other question wasn't answered 关于如何在 android.support.design.widget.TabLayout 中隐藏选项卡。 其他问题是用TabHost 提出的,我不想更改我的代码。

我想隐藏标签“三”。


片段:

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>

【问题讨论】:

  • 您能否链接您查看的其他问题并解释为什么该解决方案不适合您?这是一个重复的问题,或者需要通过更多解释进行调整。
  • 请分享源代码
  • 没有适用的代码就无法提出任何建议
  • 请分享将标签添加到 TabLayout 的源代码
  • 嗨,viewpager 有一个带有我的元素的适配器(列表),所以当我将适配器添加到 viewPager 并将 viewPager 添加到选项卡中时,选项卡会自动获得与我的适配器中的元素相同数量的选项卡

标签: android android-tablayout


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
     //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(); 
    

    【讨论】:

    • 这不是正确的做法,它不起作用
    • 它适用于我的情况。谢谢。只是在这里处理空指针异常。
    【解决方案3】:

    修改你传递给viewpageradaterList:删除第三个元素“三”,这样就消失了

    编辑

    当第三个标签应该出现时,只需更新adapterList/viewPager。你可以有一些想法学习this

    【讨论】:

    • 对不起,这不是我想要的搜索有 3 种不同类型的搜索 2 它们在应用程序中,这三种只有在其他 2 没有显示结果时才会出现。就像网络搜索一样。我真的很想隐藏这个选项,因为在我的应用程序中可以找到其他 2 个选项。所以这就是我想隐藏而不是删除标签的原因。
    • 当第三个标签出现时,只需更新adapterList/viewPager。你可以有一些ide学习this
    【解决方案4】:

    如果你想保存之前的视图(如果你在标签项中使用了任何自定义视图):

    View view=tab_layout.getTabAt(3).getCustomView();
    

    然后删除索引 idx 处的选项卡(比如索引 2):

    tab_layout.removeTabAt(idx);
    

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

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

    【讨论】:

      【解决方案5】:

      我建议你使用下面的代码

      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");
      

      【讨论】:

        【解决方案6】:

        在 Kotlin 中,您可以在定义 TabLayoutMediator 后隐藏 Tab,如下所示

        TabLayoutMediator(
                tabLayout,
                viewPager
            ) { tab, position ->
                tab.text = when (position) {
                    // define tab titles
                }
            }.attach()    
        
        ((tabLayout.getTabAt(position)?.view))?.isVisible = false
        

        【讨论】:

        • 这是要走的路。
        【解决方案7】:

        这项工作

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-05
          • 1970-01-01
          • 2017-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多