2013-06-14 8 views
9

Nach dem Lesen von References To Theme Attributes versuche ich, den Wert eines Attributs in meinem benutzerdefinierten Thema, das ich festgelegt habe, zu verweisen.Überschreiben referenzierter Stilattribute

ich einen benutzerdefinierten Stil zu einem Stil CheckedTextView

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

Die benutzerdefinierte Anwendung ist wie folgt definiert:

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

Mein Thema, das ich geschaffen ist wie folgt definiert:

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

Das angezeigte checkMark-Design ist jedoch das Drawab des Standardthemas des Geräts le und nicht mein benutzerdefinierbares Zeichen.

Die einzige Art, wie ich meine ziehbar angezeigt haben kann, ist, mit:

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

Aber das Niederlage des ganzen Zwecks dieses Attribute der überwiegenden, zumal ich dieses Attributs in mehreren Themen außer Kraft setzen möchte.

ich das Thema in der onCreate() Methode meiner Activity wie dies setze:

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

Ich versuchte auch in der AndroidManifest.xml das Thema zu setzen wie file:

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

Aber das hat nicht funktioniert. Was könnte schief gehen?

aktualisieren

Ich habe gerade ein kleines Projekt Probe und es sieht aus wie der Code, den ich oben gepostet funktioniert. Also muss ich einige andere Stile haben, die diese Eigenschaft überschreiben, oder vielleicht hat es mit meinen Layout-XML-Dateien zu tun.

In meinem großen Projekt habe ich zwei Fragments innerhalb einer Activity. Beide Fragments haben Listviews unterstützt von Adapters. In Fragment A die getView() Verfahren des Adapter ist wie folgt:

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

    //... 

    return convertView; 
} 

In Fragment B die getView() Verfahren des Adapter ist wie folgt:

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

    //... 

    return convertView; 
} 

Die Layouts sind wie folgt definiert:

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> 

Aus irgendeinem Grund in Fragment B die Themen Häkchen Attribut nicht richtig machen, während in Fragment A verwendet das Häkchen, um die aktuellen Themen und Yellowgreen richtig gestylt. Warum würde das passieren?

+0

Haben Sie Ihr _YellowGreen_ Thema im Manifest angegeben? – dominus

+0

Ich habe gerade ein Beispielprojekt erstellt, um Ihre Style-Dateien zu testen und alles funktioniert gut für mich. Also ich zweite _dominus'_ Frage: Haben Sie Aktivitäts-Thema zu 'YellowGreen' im Manifest gesetzt? – Idolon

+0

hey @dominus und @ Idolon, habe ich die Frage aktualisiert. Ich habe versucht, das Aktivitätsthema auf zwei verschiedene Arten zu setzen, aber es ist mir nicht gelungen, das Attribut 'android: listChoiceIndicatorMultiple' zu ​​überschreiben. – toobsco42

Antwort

11

Ich glaube, Sie diese Zeile in Ihrem Thema benötigen

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

so würde es so aussehen:

<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

Nach Frage Update und einige zusätzliche Informationen Form Kommentare Wir fanden, dass das Problem in Context war. Es ist der gleiche Fehler, den ich in dieser Frage gemacht habe: Android color selector doesn't work with custom attributes

Zu einem Fragment wurde Activity und zu dem anderen Application übergeben. Ich bin kein Experte, aber auch beide dieser Klassen erweitern Context nur die Activity erweitert ContextThemeWrapper, die Informationen über Stile hat. Es könnte hilfreich sein, diesen Artikel für zukünftiges Verständnis zu lesen. Kontext: http://www.doubleencore.com/2013/06/context/

+0

Hey @Mikoos, ich habe gerade versucht, dieses Attribut zu meinem Thema hinzuzufügen, aber leider überschreibt es nicht das Attribut 'android: listChoiceIndicatorMultiple'. – toobsco42

+0

Es könnte einfacher sein, wenn Sie uns ein ganzes Beispielprojekt auf github mit Kommentaren geben, was genau Sie erreichen möchten. Die Lösung könnte mit einer Abfrageanforderung gegeben werden. – Mikooos

+0

Danke @Mikoos, ich habe mehr von meinem Projektcode gepostet und glaube, dass ich näher dran bin herauszufinden, was los ist. Hoffentlich habe ich genug Details zur Verfügung gestellt. – toobsco42

Verwandte Themen