在TextView/EditText上使用"android:textAppearance"失败,但是"style"有效。

19

这是一个XML中的示例TextView,它将会对TextView应用样式TextContactContactName

<TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/photo"
        android:layout_alignTop="@id/photo"
        android:paddingLeft="10dp"
        android:text="First Last"
        style="@style/TextContactContactName"
        />

现在,我还有一些其他要设置在此元素上的内容,它们与文本无关。因此,我尝试移动 TextContactContactName 并通过 "android:textAppearance" 应用它。

<TextView
    android:id="@+id/name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/photo"
    android:layout_alignTop="@id/photo"
    android:paddingLeft="10dp"
    android:text="First Last"
    android:textAppearance=@style/TextContactContactName"
    />

不幸的是,文本格式未被应用。

这是样式(存储在res/values/styles-text.xml中)的外观:

<style name="TextContactContactName">
    <item name="android:textSize">24sp</item>
    <item name="android:textColor">#333333</item>
    <item name="android:shadowColor">#ffffff</item>
    <item name="android:shadowDx">0</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">1</item>
</style>

我是否错误地使用了textAppearance标签?

我在Android 2.2 - HTC Desire上进行了测试。

2个回答

23

好的,看起来是我的错。我进行了一个快速测试:

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Text styled using 'style'."
        style="@style/UiTestTextView"
        />
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Text styled using 'textAppearance'."
        android:textAppearance="@style/UiTestTextView"
        />

还有styles-text.xml:

<style name="UiTestTextView">
    <item name="android:textColor">#ff0000</item>
    <item name="android:textSize">16sp</item>

    <item name="android:shadowColor">#ffffff</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">2</item>
    <item name="android:shadowRadius">3</item>
</style>

关键是要记住shadow*元素不是文本属性,因此不会通过textAppearance应用。

我将在Android开发者邮件列表上询问是否需要此行为。


3
你已经从开发人员那里得到答复了吗?我也很想知道。 - artemkaxboy
请澄清一下,如果您在通过textAppearance应用样式时包含非文本外观属性,整个样式是否都无法应用? - Marvin

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接