2014-11-25 5 views
3

Это код сложного вида, который я написал. Он использует android.support.v7.widget.CardView в качестве родительского класса:Установить стиль программно не работает

public class ItemListItem extends CardView { 

    TextView tvName; 
    ImageView ivIcon; 

    public ItemListItem(Context context) { 
     super(context, null, R.style.GreenCardView); 
     LayoutInflater.from(context).inflate(R.layout.item_list_item, this, true); 
     tvName = (TextView) findViewById(R.id.tvName); 
     ivIcon = (ImageView) findViewById(R.id.ivIcon); 
    } 

    public void setItem(Item item) 
    { 
     tvName.setText(item.getName()); 
    } 
} 

Хотя я добавляю свой стиль (R.style.GreenCardView) до супер вызова конструктора в строке 7, инициализирует каждый экземпляр этого класса со стандартным белым стилем. Почему это так?

редактировать: стиль

<style name="GreenCardView" parent="CardView.Dark"> 
    <item name="contentPadding">@dimen/default_margin</item> 
    <item name="cardBackgroundColor">@color/guiColor</item> 
    <item name="cardElevation">@dimen/cardElevation</item> 
    <item name="cardCornerRadius">@dimen/cardCornerRadius</item> 
    <item name="android:foreground">?android:attr/selectableItemBackground</item> 
</style> 
+0

вы должны добавить статический класс в ItemListItem для того, чтобы установить что-нибудь из Drawable. но у меня нет источника прямо сейчас – Nepster

ответ

1

Третий аргумент View конструктор должен быть атрибут темы, например R.attr.myCardViewStyle. Вам нужно будет указать значение атрибута в теме приложения и определить атрибут в attrs.xml.

Рез/значения/attrs.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    ... 
    <attr name="myCardViewStyle" format="reference" /> 
</resources> 

Рез/значения/themes.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    ... 
    <style name="AppTheme" parent="..."> 
     ... 
     <item name="myCardViewStyle">@style/GreenCardView</item> 
    </style> 
</resources> 
Смежные вопросы