android:使用textAppearance属性设置textColor

时间:2012-06-27 12:09:17

标签: android text

我在我的应用中为字体创建了几种样式。

如何将这些样式添加到视图中? - 1)使用样式属性2)使用textAppearance。

使用样式不是一个选项,因为视图可能有其他属性(边距,填充,最小宽度等 - 我不能为视图指定2个样式),所以我需要单独指定与文本相关的属性,但是{{ 1}}在这里不起作用:

styles.xml:

android:textColor

layout.xml:

<style name="TextAppearance.baseText" parent="@android:style/TextAppearance">
    <item name="android:textAppearance">?android:textAppearanceSmall</item>
    <item name="android:typeface">sans</item>
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textSize">15sp</item> 
</style>

为什么它不起作用?如何在textappearance中指定textcolor?

3 个答案:

答案 0 :(得分:11)

正如Oderik在评论中提到的,Button视图的textColor属性具有默认值。此textColor值将覆盖通过textAppearance属性设置的任何值。因此,您有两种选择:

  • 将样式中的textColor设置为@null:

    <style name="Application.Button">   
      <item name="android:textAppearance">@style/Application.Text.Medium.White</item>
      <item name="android:textColor">@null</item> 
    </style>
    
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/Application.Button" />
    
  • 在Button XML中将textColor设置为@null:

    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@style/Application.Button"   
    android:textColor="@null" />
    

答案 1 :(得分:8)

有效。您的文字颜色为白色 - 与默认颜色相同。放置任何其他颜色,如<item name="android:textColor">#AA6699</item>,你会看到差异。 第二件事是你试图在文本外观中设置文本外观 - doen是有意义的。如果您要设置小写字母,请使用父parent="@android:style/TextAppearance.Small执行此操作并删除行<item name="android:textAppearance">?android:textAppearanceSmall</item> 第三件事是你想要小写字母并添加额外的textSize - 没有意义。 试试这个,对我有用:

<style name="BaseText" parent="@android:style/TextAppearance.Small">
        <item name="android:typeface">sans</item>
        <item name="android:textColor">#AA7755</item>
  </style>

如果你想设置一切风格:

<style name="BaseText" parent="@android:style/TextAppearance.Large">
        <item name="android:typeface">sans</item>
        <item name="android:textColor">#AA7755</item>
    </style>

   <style name="BaseText.Margins">
       <item name="android:layout_margin">10dip</item>
   </style>

BaseText.Margins从BaseText继承的位置。 然后你可以使用:

<TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        style="@style/BaseText.Margins" />

答案 2 :(得分:4)

如果您想使用android:TextAppearance代替style:来设置android:textColor,则需要在android:textColor=@null上设置TextView

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:textAppearance="@style/TextAppearance.AppCompat.Medium.MySubheader"
    android:textColor="@null"
    tools:text="Section" />

然后它将从您的android:TextAppearance

正确继承
<style name="TextAppearance.AppCompat.Medium.MySubheader">
    <item name="android:fontFamily">sans-serif-medium</item>
    <item name="android:textSize">16sp</item>
    <item name="android:textColor">@color/black_54</item>
</style>