Как удалить индикатор выбранной вкладки из TabWidget?

Вот что я хотел бы удалить:

Как заменить индикатор, показывающий, какая вкладка отображается в данный момент, а также синюю линию, которая охватывает весь виджет вкладок?

Чтобы указать: все, что я хочу указать, какая вкладка выбрана, это:

  • tab_button_active.9.png должен отображаться как фон, если вкладка ВЫБРАНА
  • tab_button_inactive.9.png должен отображаться в качестве фона, если вкладка НЕ ​​ВЫБРАНА.

edit: установка tabStripEnabled в false не имеет никакого эффекта. Добавление стиля к нему и наличие "@android:style/Widget.Holo.ActionBar" в качестве его родителя также невозможно, поскольку я нацеливался на уровень API 7, а ActionBar был реализован на уровне API 11.

18 ответов

Решение

Если 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, не имеют синих полос вдоль нижней части. Когда я смотрю на ваше изображение, я вижу небольшие 5-пиксельные промежутки вдоль этой полосы, и это дало мне представление о том, что эта полоса была не из вашего TabWidget. Надеюсь это поможет.

Эта линия 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" />

У меня есть еще один взлом.

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

По сути, это та же идея, что и у Элеохасмила.

За 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" />

Добавьте это к вашему TabLayout XML:

app:tabIndicator="@null"

Есть одна строка ответа на которую вам нужно только изменить цвет индикатора на прозрачный

color.xml

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

и поместите эту строку в ваш tabwidget

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

или же

app:tabIndicatorColor="@color/transparent2"

Попробуйте установить высоту индикатора Tab на ноль:

tabLayout.setSelectedTabIndicatorHeight(0);

Использование tabLayout.setSelectedTabIndicator(0),

tabLayout.setSelectedTabIndicatorHeight(0) сейчас устарела и tabLayout.setSelectedTabIndicatorColor(Color.TRANSPARENT) не будет работать так же хорошо, потому что использует прозрачность.

Использовать этот 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" />

Использовать

    tabLayout.setSelectedTabIndicator(null);

Это установит для выбранного индикатора доступный для рисования значение NULL.

Вы можете просто использовать этот метод на вкладке, чтобы скрыть индикатор вкладки.

tabLayout.setSelectedTabIndicatorColor(Color.TRANSPARENT);

Установить атрибут android:tabStripEnabled="false" для тебя TabWidget,

Я долго искал убрать уродливую голую панель меню, перепробовал все. случайно использовал этот код по другой причине, и, слава богу, удалил его.

    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 изменить стиль текста цвета

Для лучшей настройки app:tabIndicatorHeight="0dp" работал у меня.

Вот что я использую, так как tabIndicator.setSelectedTabIndicatorHeight(0); устарело

использовать tabIndicator.setSelectedTabIndicator(0);

Используйте приложение: tabIndicatorColor="@color/transparent_color", оно будет работать на 100%.

Я предполагаю, что вы используете ActionBarSherlock. Проблема с использованием TabWdiget заключается в том, что он не является частью ABS, поэтому он будет выглядеть "родным" для каждой версии Android. Для меня лучший подход для навигации по вкладкам с ABS - это использовать ViewPager и ViewPagerIndicator и стилизовать индикатор. Недостатком является то, что ваши вкладки должны быть фрагментами. Если вы хотите, чтобы ваши вкладки были активными, то вам стоит посмотреть, удалось ли ребятам из HoloEveryhwhere добавить TabWidget.

tabHost.getTabWidget().setStripEnabled(false);
tabHost.getTabWidget().getChildAt(1).setBackgroundColor(getResources().getColor(R.color.tabcolor));
tabHost.getTabWidget().getChildAt(2).setBackgroundColor(getResources().getColor(R.color.tabcolor));

Больше информации здесь

Другие вопросы по тегам