Моя основная деятельность - это TabActivity
, но мои вкладки не требуют значков. Я знаю, что могу опустить значок, используя перегруженный метод TabHost.TabSpec.setIndicator(CharSequence label)
, как отвечено в этом вопросе.
Но место, куда поместится значок, все равно зарезервировано, поэтому много места пропадает зря. Это уже было отмечено в этом вопросе. Похоже, я не могу просто уменьшить высоту вкладки. Мне придется поставить свой собственный View
с перегрузкой TabHost.TabSpec.setIndicator(View view)
.
Хорошо, но я хочу убедиться, что остальная стилизация (фон/цвет) остается неизменно "андроидной" на всех устройствах, как если бы я использовал стандартный индикатор вкладок. Поэтому я не хочу задавать свои собственные цвета.
Я нашел @android:color/tab_indicator_text
и использую его для TextView
s text-color, кажется, все работает, как ожидалось. Но я не знаю, где взять цвета фона вкладок по умолчанию. Я также обнаружил стиль @android:style/Widget.TabWidget
, но его применение ни к TextView
, ни к окружающему LinearLayout
, похоже, не помогает.
Это мой xml файл представления индикатора вкладок, взятый из какого-то учебника:
Как мне получить 'android default' стиль вкладок на этом?
Edit: Далее я попробовал добавить вкладку по умолчанию через setIndicator(CharSequence)
, взять getBackground
drawable ее индикаторного представления, очистить все вкладки, добавить мои пользовательские представления (см. выше), затем поместить drawable, который я извлек в setBackground
для новых индикаторов.
Результат выглядит вроде бы правильным и вроде бы неправильным. Во-первых, они снова слишком высокие, так что я ничего не получил. С другой стороны, фоновые состояния всех вкладок теперь как-то связаны (активны, выделены, выбраны и т.д.). Использование mutate()
для drawable(ов) не помогло вообще. Следующий трюк: я добавил три вкладки по умолчанию, взял все их фоны, очистил их и дал моим собственным трем вкладкам по одному фону.
Что ж, это решило вторую проблему. Их состояния больше не связаны. Но они все еще слишком высоки. Поэтому я уменьшил высоту TabWidget
с помощью updateViewLayout
. Это работает, но оставляет обесцвеченную полосу в верхней части индикаторов вкладок.
Фактически, я просто получаю ту же ситуацию, что и при использовании метода TabHost.TabSpec.setIndicator(CharSequence label)
. И вообще, все эти хаки заставляют меня чувствовать себя грязным. Нет ли элегантного способа получить дефолтную стилизацию android в пользовательском представлении?