2013-08-08 16 views
5

Próbuję umieścić wszystkie moje style w temacie dla mojej aplikacji. Mam jednak problem z zamianą textColor na TextView. To jest z mojego pliku attrs.xml.Android TextView zmień tekst Kolor z motywem

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

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

</declare-styleable> 

To z mojego styles.xml plik

<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> 

A to z mojego layout.xml plików

<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" /> 

Mam również manifest prawidłowo skonfigurowany z następującymi.

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

Kolor nigdy nie zostanie zmieniony na "@ color/detail_group_black". Czy brakuje mi czegoś prostego? A może problem polega na tym, że Android już tworzy atrybut textColor dla TextView i dlatego styl go nie przesłania? Moja strategia atrybut-motyw wydaje się działać dobrze dla reszty aplikacji, ale nie dla tego. Jakieś pomysły? Z góry dziękuję.

Ponadto, jeśli można uzyskać pomoc, wolałabym nie tworzyć niestandardowej klasy TextView tylko dla tej zmiany: jest to dość duży projekt i nie jestem pewien, jakie problemy mógłbym napotkać, jeśli rozszerzę TextView na wszystko.

Edit Również, jeśli mogę zmienić TextView mieć style = "@ Styl/flat_detail_name_view", to działa dobrze. Powodem, dla którego nie chcę tego robić, jest możliwość zmiany wyglądu tych odsłon po prostu przez zmianę motywu. Używanie style = "? Something_else" działa na wszystkich moich innych widokach, więc naprawdę tego nie rozumiem i prawdopodobnie brakuje mi czegoś prostego?

+0

Co to jest "? Detail_name_view" w stylu TextView? –

+0

style = "? Detail_name_view" jest odniesieniem do atrybutu detail_name_view. –

Odpowiedz

2

Znalazłem mój problem, na wypadek, gdyby ktoś znalazł się w podobnej sytuacji! Zasadniczo powodem, dla którego to nie działało, jest to, że nadmuchałem widok następującym kodem.

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; 
} 

W moim getGroupView mojego adaptera zwróciłem go.

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; 
} 

Widocznie mój problem było to, że musiałem wymienić LayoutInflater

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

z ..

LayoutInflater inf = mActivity.getLayoutInflater(); 

Jak sugeruje CommonsWare na dole tego postu: Theme/Style is not applied when inflater used with ApplicationContext.

Dzięki za pomoc.