【问题标题】:android disable 2 of 3 tabsandroid禁用3个选项卡中的2个
【发布时间】:2016-01-08 12:58:23
【问题描述】:

在我的 android 应用程序中,我设置了这样的选项卡布局:

final TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("TAB 1"));
tabLayout.addTab(tabLayout.newTab().setText("TAB 2"));
tabLayout.addTab(tabLayout.newTab().setText("TAB 3"));

我想禁用标签 2 和标签 3。 我试试这个,它的工作原理:

tabLayout.getChildAt(1).setEnabled(false);
tabLayout.getChildAt(2).setEnabled(false);

但我也想设置一个 toast 反馈,如果有人点击禁用选项卡,例如“此选项卡未解锁”

为此,我尝试为选项卡 2 和 3 设置 onclicklistener。 但是这个监听器不起作用,如果我之前用代码禁用了选项卡。

有人知道我该如何解决这个问题吗?

更新

@Override
public void onTabSelected(TabLayout.Tab tab) {

                if (tab.getPosition() == 1) {
                    viewPager.setCurrentItem(0);
                    TabLayout.Tab tab1 = tabLayout.getTabAt(0);
                    tab1.select();
                } else {
                    viewPager.setCurrentItem(tab.getPosition());
                }
            }

【问题讨论】:

  • 当视图被禁用时,您无法接收点击事件。请尝试使用 TouchListener。 Here你可以找到一个如何在TouchListener中检测点击事件的例子。
  • 我现在尝试另一种方式。请看我第一篇文章的更新部分。我工作正常。但问题是,我必须将选项卡指示器设置回选项卡 1。有没有办法?
  • @SpecialFighter 我得到的 tabLayout.getChildCount() 总是为 1,不管我添加了多少标签。知道为什么吗?

标签: android tabs


【解决方案1】:

我的 TabLayout 如下所示

<android.support.design.widget.TabLayout
    android:id="@+id/tabLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.design.widget.TabItem
        android:id="@+id/tab1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Tab1" />

    <android.support.design.widget.TabItem
        android:id="@+id/tab2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Tab2" />
    <android.support.design.widget.TabItem
        android:id="@+id/tab3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="tab3" />

</android.support.design.widget.TabLayout>

您必须将要禁用的选项卡转换为视图对象。像这样

View tab = ((ViewGroup) tabLayout.getChildAt(0)).getChildAt(desiredPosition);

然后您可以更改可点击性并设置 alpha,以便启用或禁用您想要的视觉和功能选项卡。这样

ViewGroup tabItem = ((ViewGroup) tabLayout.getChildAt(0)).getChildAt(desiredPosition);
    if (isChecked) {
        tabItem.setClickable(false);
        tabItem.setAlpha( 0.3F);
    }else {
        tabItem.setClickable(true);
        tabItem.setAlpha( 1F);
    }

【讨论】:

    【解决方案2】:

    我不知道是否可以使用禁用和启用选项卡视图,但我有另一种方法。

    而用户将点击标签集标志,如

    if(enable != true)
    // display toast
    else
    // enable event
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多