Моя основная деятельность - TabActivity
, но мои вкладки не требуют значков. Я знаю, что могу опустить значок, используя перегруженный метод TabHost.TabSpec.setIndicator(CharSequence label)
, как ответили в на этот вопрос .
Но место, куда должен идти значок, все еще зарезервировано, поэтому много места теряется. Это уже отмечалось в этом вопросе . Кажется, я не могу просто уменьшить высоту вкладки. Мне придется снабдить свой собственный View
перегрузкой TabHost.TabSpec.setIndicator(View view)
.
Отлично, но я хочу убедиться, что остальная часть стиля (фон / цвет) остается одинаково «android» на всех устройствах, как если бы я использовал индикатор вкладки по умолчанию. Поэтому я не хочу указывать свои цвета.
Я нашел @android:color/tab_indicator_text
, и использование его для цвета текста TextView
работает, как и ожидалось. Но я не знаю, где взять стандартные цвета фона вкладки. Я также обнаружил стиль @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 по умолчанию" на этом?
Редактировать: Далее я попытался добавить вкладку по умолчанию с помощью setIndicator(CharSequence)
, взять getBackground
отрисовку его представления индикатора, очистить все вкладки, добавить мои пользовательские представления (см. Выше), затем Поместите найденный мной чертеж в setBackground
для новых индикаторов.
Результат выглядит как правильный и неправильный. Во-первых, они снова слишком высоки, поэтому я ничего не получил. С другой стороны, фоновые состояния всех вкладок теперь каким-то образом связаны (активны, выделены, выделены и т. Д.). Использование mutate()
для рисования не помогло вообще. Следующий трюк: я добавил три вкладки по умолчанию, взял все их фоны, очистил их и дал своим собственным трем вкладкам по одному фону в каждой.
Ну, это решает вторую проблему. Их состояния больше не связаны. Но они все еще слишком высоки. Поэтому я уменьшил высоту TabWidget
, используя updateViewLayout
. Это работает, но оставляет обесцвеченную полосу в верхней части вкладки индикаторов.
На самом деле, я просто получаю ту же ситуацию, что и при использовании метода TabHost.TabSpec.setIndicator(CharSequence label)
. И вообще, все эти хаки заставляют меня чувствовать себя грязным. Разве не существует элегантного способа получить стиль Android по умолчанию в пользовательском представлении?