使用Holo-Light主题不会为TextView设置正确的颜色

时间:2014-04-07 23:25:59

标签: android android-listview actionbarsherlock android-theme android-support-library

背景

我为我的应用程序“App Manager”添加了一个主题选择器“Holo”和“Holo Light”(也许还有黑暗的动作栏)。现在我首先通过XML文件尝试它们。

问题

我正在使用谷歌的支持库并试用主题,但无论我使用什么属性和主题,我的listView上的textViews颜色都有错误的颜色。

listView包含2个定义如下的TextView:

<TextView
    android:id="@+id/appLabelTextView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_toLeftOf="@+id/isSystemAppImageView"
    android:layout_toRightOf="@+id/appIconImageView"
    android:ellipsize="marquee"
    android:text="label"
    android:textAppearance="?android:attr/textAppearanceLarge"
    tools:ignore="HardcodedText" />

<TextView
    android:id="@+id/appDescriptionTextView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/appLabelTextView"
    android:layout_below="@+id/appLabelTextView"
    android:layout_toLeftOf="@+id/isSystemAppImageView"
    android:ellipsize="marquee"
    android:text="description"
    android:textAppearance="?android:attr/textAppearanceSmall"
    tools:ignore="HardcodedText" />

Theme.AppCompat.LightTheme.AppCompat

enter image description here enter image description here

当我以编程方式执行所有操作时,以及当我使用ActionBarSherlock库时,也会发生相同的情况。

这是我使用的主题配置(这次尝试了ActionBarSherlock,但普通支持库也是如此):

<style name="BaseTheme" parent="@style/Theme.Sherlock.Light"></style>

<style name="AppTheme" parent="@style/BaseTheme">
    <item name="android:listSeparatorTextViewStyle">@style/PreferenceListHeader</item>
    <item name="android:windowBackground">@color/normal_window_background</item>
</style>

和清单:

<application
    android:name="com.lb.app_manager.utils.App"
    android:allowBackup="true"
    android:description="@string/app_description"
    android:hardwareAccelerated="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme" >

我在此处显示的活动没有任何代码或XML将主题设置为与上面所描述的不同。

我尝试了什么

我试过检查样本,并发现XML和代码之间没有明显的区别。他们工作得很好......

另外,出于某种原因,偏好活动显示得很好。

ActionBarShelock库存在同样的问题。

问题

怎么可能?应该怎么做来解决它?

3 个答案:

答案 0 :(得分:1)

我找到了导致这个问题的原因。

它与任何XML或设置样式无关。

这是因为适配器的LayourInflater。我是通过应用程序上下文而不是活动之一创建的。

它还解释了为什么我对样本项目的测试工作正常,因为我检查了错误的东西......

答案 1 :(得分:0)

在Holo light主题和其他Light主题中,我们需要设置文本颜色才能正常工作..

  <TextView
  android:id="@+id/appLabelTextView"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_alignParentTop="true"
  android:layout_toLeftOf="@+id/isSystemAppImageView"
  android:layout_toRightOf="@+id/appIconImageView"
  android:ellipsize="marquee"
  android:textcolor="#000"
  android:text="label"
  android:textAppearance="?android:attr/textAppearanceLarge"
  android:textStyle="bold"
  tools:ignore="HardcodedText" />

  <TextView
  android:id="@+id/appDescriptionTextView"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_alignLeft="@+id/appLabelTextView"
  android:layout_below="@+id/appLabelTextView"
  android:layout_toLeftOf="@+id/isSystemAppImageView"
  android:ellipsize="marquee"
  android:textcolor="#000"
  android:text="description"
  android:textAppearance="?android:attr/textAppearanceSmall"
  tools:ignore="HardcodedText" />

希望这会有效。试试这个,让我知道结果。

答案 2 :(得分:0)

我尝试了您使用Theme.AppCompat和Theme.AppCompat.Light提供的示例,并且它们都在API级别10和18上按预期正常工作。由于您没有提供完整代码,只有片段,它必须如果您的应用程序中存在额外的XML或代码,导致问题。

有几件事要检查:

  • 从AppTheme定义中删除这些条目,以确保它们不会干扰并导致问题:

    <item name="android:listSeparatorTextViewStyle">@style/PreferenceListHeader</item>
    <item name="android:windowBackground">@color/normal_window_background</item>
    
  • 您可能针对不同的API级别使用不同的样式定义。检查res / values-v11 / styles.xml,res / values-v14 / styles.xml等的内容以确保它们不会干扰