重写引用的样式属性



阅读完主题属性参考后,我试图引用我设置的自定义主题中属性的值。

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

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

用户定义的样式定义为:

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

我创建的主题定义为:

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

但这不起作用。哪里出了问题?

<标题> 更新

我刚刚创建了一个小样本项目,它看起来像我上面发布的代码是工作的。所以我必须有一些其他的样式重写这个属性,或者它与我的布局xml文件。

在我的大型项目中,我在Activity中有两个FragmentsFragmentsListviews都有Adapters的支持。Fragment AAdaptergetView()方法如下:

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

Fragment BAdaptergetView()方法如下:

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使用当前的yellow - green主题并且样式正确。为什么会发生这种情况?

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

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

经过问题更新和一些额外的信息形式的评论,我们发现问题在Context。这是同样的错误,我在我的问题:Android颜色选择器不与自定义属性

工作

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

相关内容

  • 没有找到相关文章

最新更新