2010-12-16 7 views
6

Ich habe einige Stilressourcen definiert, die TextAppearance mit einem definierten TextColor enthalten. Ich verwende dann die Stile auf einige TextViews und Buttons. Alle Stile kommen mit dem TextView, aber nicht mit dem Button. Aus irgendeinem Grund wird das TextColor-Attribut nicht angezeigt. Ist das ein Fehler, oder fehlt mir bei dem Button etwas? HierTextColor definiert im Stil, der auf TextView angewendet wird, aber nicht Button?

ist die Stildefinition:

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

    <style name="TestApp">  
    </style> 

    <!-- Text Appearances --> 
    <style name="TestApp.TextAppearance"> 
     <item name="android:typeface">sans</item> 
     <item name="android:textStyle">bold</item> 
     <item name="android:textSize">16px</item>  
     <item name="android:textColor">#6666FF</item> 
    </style> 

    <!-- Widget Styles --> 
    <style name="TestApp.Widget"> 
     <item name="android:layout_margin">3sp</item> 
    </style> 

    <style name="TestApp.Widget.Label"> 
     <item name="android:textAppearance">@style/TestApp.TextAppearance</item> 
     <item name="android:layout_width">wrap_content</item> 
     <item name="android:layout_height">wrap_content</item> 
    </style> 

    <style name="TestApp.Widget.Switch"> 
     <item name="android:textAppearance">@style/TestApp.TextAppearance</item> 
     <item name="android:layout_width">100px</item> 
     <item name="android:layout_height">100px</item> 
    </style> 

</resources> 

und hier ist das Layout, in dem ich versuche, sie anzuwenden:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
<TextView 
    style="@style/TestApp.Widget.Label" 
    android:text="This is my label." /> 
<TextView 
    style="@style/TestApp.Widget.Label" 
    android:text="This is my disabled label." 
    android:enabled="false" /> 
<Button 
    style="@style/TestApp.Widget.Switch" 
    android:text="This is my switch." /> 
<Button 
    style="@style/TestApp.Widget.Switch" 
    android:text="This is my disabled switch." 
    android:enabled="false" /> 
</LinearLayout> 

Antwort

2

Scheinbar der Weg, dies zu erreichen, besteht darin, das textColor Attribut in der Tastengestaltung zu überschreiben. Android macht es auf diese Weise in ihrem Global Thema Styles:
https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/styles.xml

ich lieben würde zu verstehen, warum dies der Fall ist.

+1

Ich hatte das genaue Problem und löste das überschreiben von TextColor. Es scheint, dass Schaltflächen das textAppearance-Attribut ignorieren. –

0

Es scheint auch ein textAppearanceButton zu sein:

http://developer.android.com/reference/android/R.attr.html#textAppearanceButton

Sie möchten das vielleicht versuchen.

+1

ich nicht bewusst war dieses Attribut. Es hatte jedoch keinen Einfluss. Aus irgendeinem Grund scheint das Attribut textColor von Button und abgeleiteten Klassen ignoriert zu werden, wenn es über einen Stil bereitgestellt wird. Es wirkt sich nur aus, wenn es ohne Stil gesetzt ist. – jsmith

1

Für den Fall von Schaltflächen gibt es zwei Möglichkeiten, Textfarbe über Attribute zu definieren: textColor und durch einen Stil definiert durch textAppearance.

Der Wert von textColor (die von dem Standardstil festgelegt wird) wird ein beliebigen Text-Farbwert durch den textAppearance Stil überschreibt. Daher müssen Sie das Attribut textColor auf zwei Arten auf @null setzen.

  • die Textfarbe Set im Stil @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" /> 
    
  • Stellen Sie die Textfarbe @null in der Button-XML:

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