32

这是我要删除的内容:

在此处输入图像描述

如何替换显示当前显示哪个选项卡的指示器以及跨越整个选项卡小部件的蓝线?

要指定:我只想指出选择了哪个选项卡:

  • 如果选项卡被选中,tab_button_active.9.png 应该显示为背景
  • 如果选项卡未选择,tab_button_inactive.9.png 应显示为背景。

编辑:将 tabStripEnabled 设置为 false 无效。向其添加样式并将“@android:style/Widget.Holo.ActionBar”作为其父级也是不可能的,因为我的目标是 API 级别 7 并且 ActionBar 是在 API 级别 11 中实现的。

4

17 回答 17

41

我还有另一个技巧。

    TabLayout tabLayout = (TabLayout) fragmentView.findViewById(R.id.tabs);
    tabLayout.setSelectedTabIndicatorHeight(0);

这与 Eleojasmil 的想法基本相同。

于 2015-11-16T16:04:47.900 回答
39

这一行在app:tabIndicatorHeight="0dp"xml 中为我解决了问题

 <android.support.design.widget.TabLayout
        android:id="@+id/view_bottom_tabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabIndicatorHeight="0dp"             //this line
        app:tabGravity="fill"
        app:tabMode="fixed" />
于 2016-01-28T14:06:34.413 回答
17

如果android:tabStripEnabled="false"不起作用,那么我也认为调用setStripEnabled(boolean stripEnabled)也没有效果。如果所有这些都是真的,那么您的问题可能不在 TabWidget 中。

我建议查看您的标签指示器。试试这些修改。此代码取自具有选项卡的片段。

这是创建选项卡指示器视图的代码。

    View indicator = LayoutInflater.from(getActivity()).inflate(R.layout.tab,
(ViewGroup) mRoot.findViewById(android.R.id.tabs), false);

        TabSpec tabSpec = mTabHost.newTabSpec(tag);
        tabSpec.setIndicator(indicator);
        tabSpec.setContent(tabContentId);

您的标签指示器视图可能与此类似。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:layout_weight="1"
    android:background="@drawable/tabselector"
    android:padding="5dp" >

    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/tab1icon"/>

</LinearLayout>

现在重要的部分是android:background="@drawable/tabselector"在 LinearLayout 中。我的看起来像这样。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Non focused states -->
    <item
        android:state_focused="false"
        android:state_selected="false"
        android:state_pressed="false"
        android:drawable="@drawable/tab_unselected_light" />
    <item
        android:state_focused="false"
        android:state_selected="true"
        android:state_pressed="false"
        android:drawable="@drawable/tab_selected_light" />
    <!-- Focused states -->
    <item
        android:state_focused="true"
        android:state_selected="true"
        android:state_pressed="false"
        android:drawable="@drawable/tab_focused_light" />
    <!-- Pressed state -->
    <item
        android:state_pressed="true"
        android:drawable="@drawable/tab_pressed_light" />
</selector>

这个 tabselector.xml 是你将@drawable/tab_pressed_light与你的@drawable/tab_button_active和交换@drawable/tab_unselected_light的地方@drawable/tab_button_inactive

请务必检查进入 tabselector.xml 的所有可绘制对象底部没有蓝色条带。当我查看您的图像时,我可以看到该条带上有 5px 的小间隙,这就是让我认为该条带不是来自您的 TabWidget 的原因。希望这可以帮助。

于 2013-03-07T00:52:00.303 回答
16

适用于TabLayout:只需使用app:tabIndicatorColor="@android:color/transparent"

<android.support.design.widget.TabLayout
        android:id="@+id/profile_album_tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:animateLayoutChanges="true"
        android:theme="@style/AppTheme.AppBarOverlay"
        app:tabBackground="@drawable/tab_background"
        app:tabIndicatorColor="@android:color/transparent"
        app:tabPadding="@dimen/common_margin" />
于 2015-12-10T10:30:32.383 回答
9

将此添加到您的TabLayout XML

app:tabIndicator="@null"
于 2019-02-12T17:43:19.400 回答
6

有一个答案,您只需将指示器的颜色更改为透明

颜色.xml

 <color name="transparent2">#00000000</color>

并将这一行放到你的 tabwidget

tabLayout.setSelectedTabIndicatorColor(getResources().getColor(R.color.transparent2));

或者

app:tabIndicatorColor="@color/transparent2"
于 2015-11-12T02:44:49.010 回答
6

尝试将 Tab 指示器高度设置为零:

tabLayout.setSelectedTabIndicatorHeight(0);
于 2016-01-18T08:31:36.220 回答
4

使用tabLayout.setSelectedTabIndicator(0).

tabLayout.setSelectedTabIndicatorHeight(0)现在已弃用,tabLayout.setSelectedTabIndicatorColor(Color.TRANSPARENT)并且由于它使用透明度,因此性能不佳。

于 2019-06-14T15:02:14.473 回答
3

采用

    tabLayout.setSelectedTabIndicator(null);

这会将选定的可绘制指标设置为空。

于 2019-10-04T06:14:50.877 回答
2

android:tabStripEnabled="false"您的TabWidget.

于 2013-02-03T12:13:08.197 回答
2

我找了半天想把丑陋的全息菜单栏去掉。出于另一个原因意外使用了此代码,感谢上帝将其删除。

    for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {          
        tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#FF0000")); // unselected
        TextView tv = (TextView)tabhost.getTabWidget().getChildAt(i).findViewById(android.R.id.title); //Unselected Tabs
        tv.setTextColor(Color.parseColor("#ffffff"));
    }

来源:Android tabhost 更改文字颜色样式

于 2015-04-09T11:25:53.497 回答
2

您可以简单地在标签布局上使用此方法来隐藏标签指示器。

tabLayout.setSelectedTabIndicatorColor(Color.TRANSPARENT);
于 2019-05-31T10:47:16.587 回答
2

用这个app:tabIndicator="@null"

<com.google.android.material.tabs.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabGravity="fill"
    app:tabIndicator="@null"
    app:tabMode="fixed" />
于 2020-09-28T12:52:27.553 回答
1

这是我使用的,因为tabIndicator.setSelectedTabIndicatorHeight(0);已弃用

采用 tabIndicator.setSelectedTabIndicator(0);

于 2020-02-18T06:27:45.827 回答
1

为我工作的最佳设置app:tabIndicatorHeight="0dp"

于 2020-03-17T06:10:18.917 回答
-1

我假设您使用的是 ActionBarSherlock。使用 TabWdiget 的问题在于,它不是 ABS 的一部分,因此对于每个 Android 版本来说,它看起来都是“原生的”。对我来说,使用 ABS 进行选项卡导航的最佳方法是使用 ViewPager 和 ViewPagerIndicator 并设置指示器的样式。缺点是,您的标签必须是片段。如果你需要你的标签成为活动,那么你应该看看 HoloEveryhwhere 的人是否设法添加了 TabWidget。

于 2013-03-01T09:06:22.057 回答
-2
tabHost.getTabWidget().setStripEnabled(false);
tabHost.getTabWidget().getChildAt(1).setBackgroundColor(getResources().getColor(R.color.tabcolor));
tabHost.getTabWidget().getChildAt(2).setBackgroundColor(getResources().getColor(R.color.tabcolor));

更多信息在这里

于 2016-09-22T08:00:09.550 回答