Могу ли я использовать стандартный стиль вкладок в моем пользовательском представлении вкладок?

Моя основная деятельность - это TabActivity, но мои вкладки не требуют значков. Я знаю, что могу опустить значок, используя перегруженный метод TabHost.TabSpec.setIndicator(CharSequence label), как отвечено в этом вопросе.

Но место, куда поместится значок, все равно зарезервировано, поэтому много места пропадает зря. Это уже было отмечено в этом вопросе. Похоже, я не могу просто уменьшить высоту вкладки. Мне придется поставить свой собственный View с перегрузкой TabHost.TabSpec.setIndicator(View view).

Хорошо, но я хочу убедиться, что остальная стилизация (фон/цвет) остается неизменно "андроидной" на всех устройствах, как если бы я использовал стандартный индикатор вкладок. Поэтому я не хочу задавать свои собственные цвета.

Я нашел @android:color/tab_indicator_text и использую его для TextViews 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 в пользовательском представлении?

11
задан Community 23 May 2017 в 12:29
поделиться