2013-08-08 2 views
5

Я пытаюсь поместить все мои стили в тему для своего приложения. Однако у меня возникают проблемы с изменением textColor в TextView. Это из моего файла attrs.xml.Android TextView изменить textColor с темой

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

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

</declare-styleable> 

Это из моего styles.xml файл

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

И это от моего layout.xml файла

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

У меня также есть манифест, правильно настроенный со следующим.

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

Цвет никогда не изменяется на "@ color/detail_group_black". Я что-то пропустил? Или проблема в том, что Android уже создает атрибут textColor для TextView, и поэтому стиль не переопределяет его? Моя стратегия-атрибут-тема, похоже, хорошо работает для остальной части приложения, но не для этого. Есть идеи? Заранее спасибо.

Кроме того, если мне это поможет, я бы предпочел не создавать собственный класс TextView только для этого изменения: его довольно большой проект, и я не уверен, какие проблемы я мог бы запустить, если я расширяю TextView для все.

Редактировать Кроме того, если я изменю TextView иметь стиль = «@ стиль/flat_detail_name_view», он отлично работает. Причина, по которой я не хочу этого делать, заключается в том, что я могу изменить внешний вид этих текстовых просмотров, просто изменив тему. Использование style = "? Something_else" работает на всех моих других взглядах, поэтому я действительно не понимаю этого, и я, вероятно, пропустил что-то простое?

+0

Что такое «? Detail_name_view» в стиле TextView? –

+0

style = "? Detail_name_view" - ссылка на атрибут detail_name_view. –

ответ

2

Я нашел свою проблему, если кто-то столкнется с подобной ситуацией! В основном причина, по которой это не работает, заключается в том, что я раздувал представление следующим кодом.

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

И в getGroupView моего адаптера я возвращал его.

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

Видимо моя проблема заключалась в том, что мне нужно заменить LayoutInflater

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

с ..

LayoutInflater inf = mActivity.getLayoutInflater(); 

Как было предложено CommonsWare в нижней части этого поста: Theme/Style is not applied when inflater used with ApplicationContext.

Благодарим за помощь.

Смежные вопросы