重写引用的样式属性

阅读引用主题属性后,我想引用我设置的自定义主题中的属性的值。

我正在将一个用户定义的样式应用于CheckedTextView

 <CheckedTextView android:id="@+id/contactInfo" style="@style/ListViewCheckedTextViewRowStyle" > </CheckedTextView> 

用户定义的样式被定义为:

 <style name="ListViewCheckedTextViewRowStyle" parent="@style/ListViewRowStyle"> <item name="android:checkMark">?android:listChoiceIndicatorMultiple</item> </style> 

我创build的主题定义为:

 <style name="Theme.Yellowgreen" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_holo_light</item> </style> 

但是,显示的checkMark样式是设备的默认主题可绘制的,而不是我用户定义的可绘制的。

我可以绘制我的drawable的唯一方法是:

 <style name="ListViewCheckedTextViewRowStyle" parent="@style/ListViewRowStyle"> <item name="android:checkMark">@drawable/btn_check_holo_light</item> </style> 

但是这样做会挫败覆盖这个属性的全部目的,特别是因为我想在多个主题中覆盖这个属性。

我在我的ActivityonCreate()方法中设置主题,如下所示:

 public void onCreate(Bundle savedInstanceState) { this.setTheme(R.style.Theme_Yellowgreen); super.onCreate(savedInstanceState); // ... } 

我也尝试在AndroidManifest.xml文件中设置主题,如:

 <application android:theme="@style/Theme.Yellowgreen" > 

但是这没有用。 有什么可能会出错?

更新

我刚刚创build了一个小样本项目,看起来像我上面张贴的代码正在工作。 所以我必须有一些其他的风格,这是覆盖这个属性,也许它必须做我的布局XML文件。

在我的大型项目中,我有一个Activity两个Fragments 。 这两个Fragments都有Adapters支持的Listviews 。 在Fragment A AdaptergetView()方法如下所示:

 public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.contact_entry, null); } //... return convertView; } 

Fragment B中, AdaptergetView()方法如下:

 public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item, parent, false); } //... return convertView; } 

布局定义如下:

list_item.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/list_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <include layout="@layout/list_item_header" /> <include layout="@layout/contact_entry" /> <View android:id="@+id/list_divider" android:layout_width="match_parent" android:layout_height="1dp" android:background="@android:drawable/divider_horizontal_dark" /> </LinearLayout> 

list_item_header.xml

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/header_text" android:layout_width="match_parent" android:layout_height="25dip" android:background="@color/dark_blue" android:gravity="center_vertical" android:paddingLeft="6dip" android:textColor="@color/white" android:textSize="14sp" android:textStyle="bold" /> 

contact_entry.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/contactEntry" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" android:orientation="horizontal" > <QuickContactBadge android:id="@+id/contactPic" style="@style/ContactPicStyle" /> <CheckedTextView android:id="@+id/contactInfo" style="@style/ListViewCheckedTextViewRowStyle" > </CheckedTextView> </LinearLayout> 

由于某些原因,在Fragment B中主题化的checkMark属性不能正确呈现,而在Fragment A ,checkMark使用当前的YellowGreen主题,并且样式正确。 为什么会这样呢?

我认为你需要在你的主题这一行

 <item name="android:checkedTextViewStyle">@style/ListViewCheckedTextViewRowStyle</item> 

所以它看起来像这样:

 <style name="Theme.Yellowgreen" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_holo_light</item> <item name="android:checkedTextViewStyle">@style/ListViewCheckedTextViewRowStyle</item> </style> 

UPDATE

问题更新和一些额外的信息forms评论后,我们发现问题是在Context 。 这是我的问题相同的错误: Android颜色select器不适用于自定义属性

将一个片段传递给另一个Application 。 我不是专家,但即使这两个类都扩展Context只有Activity扩展ContextThemeWrapper ,其中有关于样式的信息。 阅读该文章以便将来理解上下文可能会有所帮助: http : //www.doubleencore.com/2013/06/context/