Android TabWidget в светлой теме
Вопрос
У меня есть приложение, ориентированное на платформу 1.5 и использующее светлую тему по умолчанию.При использовании виджета вкладок с этой темой изображения вкладок едва видны, а названия вкладок совершенно невозможно различить, за исключением активной в данный момент вкладки.
В темной теме по умолчанию эти вкладки отображаются довольно четко, но это не то решение, которое меня бы очень порадовало.Могу ли я установить простую настройку, которая настраивает виджет вкладок для лучшей видимости в светлых темах, или мне придется вручную изменять изображения и стили текста?
Решение
это некрасиво, но вы можете попробовать это в своей вкладке.
// light theme support
final TabHost tabHost = getTabHost();
tabHost.setBackgroundColor(Color.WHITE);
tabHost.getTabWidget().setBackgroundColor(Color.BLACK);
// hack to set font size
LinearLayout ll = (LinearLayout) tabHost.getChildAt(0);
TabWidget tw = (TabWidget) ll.getChildAt(0);
// first tab
RelativeLayout rllf = (RelativeLayout) tw.getChildAt(0);
lf = (TextView) rllf.getChildAt(1);
lf.setTextSize(21);
lf.setPadding(0, 0, 0, 6);
// second tab
RelativeLayout rlrf = (RelativeLayout) tw.getChildAt(1);
rf = (TextView) rlrf.getChildAt(1);
rf.setTextSize(21);
rf.setPadding(0, 0, 0, 6);
/res/values/colors.xml должен иметь
<resources>
<drawable name="black">#ff000000</drawable>
<drawable name="white">#ffffffff</drawable>
</resources>
AndroidManiest.xml должен иметь
<application android:theme="@android:style/Theme.Light">
если хочешь сделать что-то более безумное, попробуй http://ezmobile.wordpress.com/2009/02/02/customized-android-tabs/
Другие советы
Это ошибка;можете ли вы сообщить об этом в трекер проблем?
AFAIK, ваш обходной путь настройки стилей текста и изображений звучит правильно.
Также примечательно, что виджет вкладок в версии 2.0 не имеет облегченного стиля.
Используя инструмент просмотра иерархии, я нашел идентификатор Android для текстового представления на вкладке.Лучший способ изменить свойства текста (включая цвет) — сделать следующее...
TabWidget tw = (TabWidget)tabHost.findViewById(android.R.id.tabs);
View tabView = tw.getChildTabViewAt(0);
TextView tv = (TextView)tabView.findViewById(android.R.id.title);
tv.setTextSize(20);
Очень простой способ решить проблему цвета/контраста в макете:
<TabWidget
android:id="@android:id/tabs"
android:background="#FF000000"
android:padding="2dp"
Это устанавливает черный фон TabWidget и добавляет немного отступов, чтобы вы могли контрастировать с вкладками на черном фоне.Он не идеален, но работает в 1.5, 2.2, светлой и темной теме.