Моя основная деятельность - TabActivity
, но мои вкладки не требуют значков. Я знаю, что я могу опустить значок, используя перегруженный метод TabHost.TabSpec.setIndicator(CharSequence label)
, как указано в этом вопросе.
Но пространство, куда будет идти значок, по-прежнему сохраняется, поэтому много пространства теряется. Это уже было отмечено в этом вопросе. Кажется, я не могу просто уменьшить высоту вкладки. Мне придется передать свою собственную View
с перегрузкой TabHost.TabSpec.setIndicator(View view)
.
Хорошо, но я хочу убедиться, что остальная часть стиля (фон/раскраска) остается неизменной "андроид" на всех устройствах, как если бы я использовал индикатор вкладки по умолчанию. Поэтому я не хочу предоставлять свои собственные цвета.
Я нашел @android:color/tab_indicator_text
, и использование его для текстового цвета TextView
похоже работает как ожидалось. Но я не знаю, где получить значения по умолчанию tab-background-colors. Я также обнаружил стиль @android:style/Widget.TabWidget
, но применение его ни к TextView
, ни к окружающему LinearLayout
, похоже, не помогает.
Это мой XML файл с отображением индикатора вкладки, взятый из некоторого учебника:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:padding="12dip" >
<TextView
android:id="@+id/tabText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/tab_indicator_text" />
</LinearLayout>
Как мне настроить стиль вкладки "android default"?
Изменить:. Затем я попытался добавить вкладку по умолчанию через setIndicator(CharSequence)
, вытащить getBackground
его отображение индикатора, очистить все вкладки, добавить мои пользовательские представления (см. выше), затем поставьте извлеченный я в setBackground
для новых индикаторов.
Результат выглядит правильно и не так. Во-первых, они снова слишком высокие, поэтому я ничего не получил. С другой стороны, состояния фона всех вкладок теперь связаны каким-то образом (активным, выделенным, выбранным и т.д.). Использование mutate()
на drawable (s) не помогло вообще. Следующий трюк: я добавил три вкладки по умолчанию, взял все их фоны, очистил их и дал три моих вкладки по одному фону.
Ну, это решает вторую проблему. Их состояния больше не связаны. Но они все еще слишком высоки. Поэтому я уменьшил высоту TabWidget
, используя updateViewLayout
. Это работает, но оставляет выцветший штрих в верхней части индикаторов вкладки.
На самом деле, я просто оказываюсь в той же ситуации, что и при использовании метода TabHost.TabSpec.setIndicator(CharSequence label)
. И вообще, все эти хаки заставляют меня чувствовать себя грязным. Не существует ли элегантный способ установки стиля Android по умолчанию?