2013-08-08 20 views
5

Ich versuche, alle meine Stile in ein Thema für meine App zu setzen. Ich habe jedoch Probleme beim Ändern der textColor in einem TextView. Dies ist von meiner attrs.xml Datei.Android TextView change textColor mit Thema

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

<declare-styleable name="flat"> 
    <attr name="detail_name_view" format="reference" /> 

</declare-styleable> 

Dieses von meiner styles.xml ist Datei

<style name="flat_theme" parent="android:Theme.NoTitleBar"> 
    <item name="detail_name_view">@style/flat_detail_name</item> 
</style> 
<style name="flat_detail_name" parent="@android:style/Widget.TextView"> 
    <item name="android:textAppearance">?android:attr/textAppearanceMedium</item> 
    <item name="android:textColor">@color/detail_group_black</item> 
    <item name="android:textSize">16sp</item> 
    <item name="android:singleLine">true</item> 
    <item name="android:ellipsize">end</item> 
</style> 

Und das ist aus meiner layout.xml Datei

<TextView 
     android:id="@+id/detail_name" 
     style="?detail_name_view" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:layout_gravity="left|center_vertical" 
     android:layout_marginLeft="5dp" 
     android:layout_weight="1" 
     android:gravity="left|center_vertical" /> 

Ich habe auch das Manifest richtig eingerichtet mit dem folgenden.

<application 
    android:name="com.example.blah" 
    android:icon="@drawable/blah" 
    android:label="@string/app_name" 
    android:theme="@style/flat_theme" 

Die Farbe wird nie in "@ color/detail_group_black" geändert. Fehle ich etwas Einfaches? Oder ist das Problem, dass Android bereits ein TextColor-Attribut für die TextView erstellt und deshalb der Stil nicht überschreibt? Meine Attribut-Thema-Strategie scheint gut für den Rest der App zu funktionieren, aber nicht das. Irgendwelche Ideen? Danke im Voraus.

Auch, wenn es geholfen werden kann, würde ich lieber nicht eine benutzerdefinierte TextView-Klasse nur für diese Änderung erstellen: es ist ein ziemlich großes Projekt, und ich bin mir nicht sicher, welche Art von Problemen könnte ich laufen, wenn ich TextView für erweitern alles.

bearbeiten Auch wenn ich die Textview ändern style = "@ style/flat_detail_name_view" zu haben, es funktioniert gut. Der Grund, warum ich das nicht tun möchte, ist, dass ich das Aussehen dieser Textansichten ändern kann, indem ich einfach das Thema ändere. Die Verwendung von style = "? Something_else" funktioniert bei allen meinen anderen Ansichten, also verstehe ich das wirklich nicht und vermisse wahrscheinlich etwas Einfaches?

+0

Was ist "? Detail_name_view" in einem TextView-Stil? –

+0

style = "? Detail_name_view" ist eine Referenz auf das detail_name_view-Attribut. –

Antwort

2

Ich habe mein Problem gefunden, falls jemand in eine ähnliche Situation gerät! Der Grund, warum dies nicht funktionierte, ist, dass ich die Ansicht mit dem folgenden Code aufgepumpt habe.

private View buildGroupView(ExpandListGroup group) { 
    LayoutInflater inf = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
    View view; 
    switch(group.getType()){ 
     case ExpandListGroup.HEADER : 
      view = inf.inflate(R.layout.three_col_header, null); 
      break; 
     default: 
      view = inf.inflate(R.layout.detail_expandablelist_group_item, null); 
      break; 

    } 

    return view; 
} 

Und in meinem Adapter war GetGroupView ich es zurück.

public View getGroupView(int groupPosition, boolean isLastChild, View convertView, 
     ViewGroup parent) { 
    View view = convertView; 
    ExpandListGroup group = (ExpandListGroup) getGroup(groupPosition); 

    view = buildGroupView(group); 

    setGroupViewData(group, view); 

    return view; 
} 

Offenbar mein Problem war, dass ich LayoutInflater

inf = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 

mit ..

LayoutInflater inf = mActivity.getLayoutInflater(); 

Wie CommonsWare am Ende dieses Beitrags vorgeschlagen ersetzen benötigt: Theme/Style is not applied when inflater used with ApplicationContext.

Danke für Ihre Hilfe.