特定于主题的TextView外观并不总是有效

时间:2011-08-22 19:53:34

标签: android themes android-3.0-honeycomb

我有这个相当特殊的问题。我正在使用默认的Android外观来设置我的TextView样式,并且除了一个接缝之外的所有外观都可以完美地工作。

我正在使用的外观是?android:attr/textAppearanceSmall,当我在布局XML设计器中并且在HoloHolo.Light之间更改主题时,它正在改变字体颜色而没有任何问题(Android 3.0 +)。

但是,当一个特定的TextView在平板电脑上运行时,它不会被设置样式,并且它使用与其他工作完全相同的XML代码。

这是我的TextView的XML代码不起作用:

<TextView android:id="@+id/textView1" 
    android:text="TextView"
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_width="match_parent"
    android:layout_marginTop="2sp"
    android:lines="2"
    android:gravity="top|center"
    android:textAppearance="?android:attr/textAppearanceSmall">
</TextView>

我也尝试使用以下方法在代码中执行此操作,但这也不起作用:

setTextAppearance(this, android.R.attr.textAppearanceSmall);

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

首先,我想指出,当样式多于一个View - 具有相同样式的组件(通过使用XML)时,creating Styles就是非常简洁的方式。

所以你的风格可能如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- The Style for all the TextViews -->
    <style name="TextViewStyle">
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_alignParentBottom">true</item>
        <item name="android:layout_alignParentLeft">true</item>
        <item name="android:layout_width=">match_parent</item>
        <item name="android:layout_marginTop">2sp</item>
        <item name="android:lines">2</item>
        <item name="android:gravity">top|center</item>
        <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
    </style>

</resources>

虽然您的布局只是这样:

<TextView android:id="@+id/textView1" 
    android:text="TextView"
    style="@style/TextViewStyle"
/>

<TextView android:id="@+id/textView2" 
    android:text="Another TextView"
    style="@style/TextViewStyle"
/>

<!-- .... -->

这使代码更易于维护,并有助于防止打字错误。


最后但并非最不重要的是,已经讨论了与您的问题类似的问题here。这也可能有助于解决您的问题。