2010-09-05 1 views
1

В моем приложении для Android я использую TabWidget без какой-либо специальной настройки. Я бы хотел, чтобы Android позаботился о конкретном внешнем виде, который отлично работает, если сравнить Android 1.6 с 2.1, например. Просто используя TabWidget, тот же код приводит к различным формам вкладок, потому что SDK определяет способ его рисования. Вот как это выглядит на 2.1, например:Android: выделенная вкладка TabWidget не читается на HTC Sense

alt text

Итак, вкладка выделена серый и шрифт белого цвета, вы можете прочитать его достаточно хорошо.

Но, если у вас есть HTC Sense, это выглядит следующим образом: alt text

картина не так уж хорошо, но просто поверьте мне, что это белый текст на белом фоне, который на самом деле не так легко читать ...

Мои вопросы:

1) Почему Android создать TabWidget с белым на белом тексте? Я никогда не определял ни цвет текста, ни цвет фона, поэтому система должна выбирать разумные цвета.

2) Я предполагаю, что другие TabWidgets выглядят просто отлично на HTC Sense, потому что в противном случае это была бы довольно большая и популярная проблема. Так почему мой TabWidget имеет эту проблему, а не другие.

3) Как я могу исправить эту проблему, не изменяя внешний вид устройств без Sense?

Как я уже сказал, я никак не настраивал TabWidget. Вот мое определение:

<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@android:color/black" 
    > 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     > 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      /> 
     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:padding="0dp" 
      > 
     <ScrollView 
      android:id="@+id/shortenerScrollView" 
      android:layout_height="fill_parent" 
      android:layout_width="fill_parent" 
      android:background="@android:color/black" 
      android:fadingEdge="horizontal" 
      > 

Таким образом, помимо определения черного, как мой общего цвет фона приложения, нет цвета или стиля Defintion сделал. Единственным исключением может быть то, что я использую стандартные идентификаторы Android для TabHost и TabWidget.

/Edit: Вот Defintion из вкладок в OnCreate метод:

th = getTabHost(); 
th.addTab(th.newTabSpec("shortener").setIndicator(getString(R.string.tabShortenerName), 
     res.getDrawable(R.drawable.url_zip)).setContent(R.id.shortenerScrollView)); 

Класс расширяет TabActivity.

/Edit 2: Устройство, которое имеет белый текст на белом фоне, представляет собой HTC Legend под управлением Android 2.1 кстати.

/Редактировать 3: dream3r был прав. Изменение значения targetSdk на 4 тоже помогло мне (до этого было установлено 6)! Я действительно не понимаю, но сейчас я могу жить с этим. :)

Вот картина того, как она выглядит сейчас: alt text

+0

Покажите нам, как вы определяете вкладки (например, 'setIndicator()'). – CommonsWare

+0

Добавлено определение вкладок. Я просто передаю имя вкладки, значок и контент, который он должен загрузить для этой вкладки. – Manuel

ответ

4

У вас есть android:targetSdkVersion набор в вашем AndroidManifest.xml?

Я сделал некоторые испытания с использованием образца приложения и у меня такая же проблема, если я изложу targetSdkVersion для значения больше 4.

+0

Да, я знаю! Я установил цель в 6, а minSdk - 3. Я проверю, почему именно я устанавливаю такую ​​высокую цель, возможно, она больше не нужна (были классы, которые я специально использовал, если пользователь был на более высоком SDK, но, возможно, Мне это больше не нужно). Спасибо, что указали это, я попробую. – Manuel

+0

Ницца, работает для меня! :) – Manuel

+0

Стоит отметить, что эта проблема белого цвета является дефектом в реализации HTC 2.1. Хорошее обходное решение by @ dream3r; установка targetSdkVersion на 4 приводит к тому, что Android включит пакет совместимости на устройствах 2.1, что переопределяет реализацию вкладки HTC с чем-то, что работает. – cdhabecker