12

Ich verwende ActionBarSherlock und ich versuche, die activatedBackgroundIndicator Attribut für die Zeile Hintergrund anpassen.Benutzerdefinierte Hintergrund für activatedBackgroundIndicator auf ActionBarSherlock funktioniert nicht

Wenn ich die neueste Android-sdk verwenden, ohne die ActionBarSherlock, ich bin in der Lage den Hintergrund der Erstellung der folgenden Stil auf res/Werte/style.xml ist und es auf AndroidManifest.xml anpassen als android: theme = "@ style/Theme.Custom":

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme.Custom" parent="android:Theme.Holo.Light.DarkActionBar"> 
    <item name="android:activatedBackgroundIndicator">@drawable/activated_background</item> 
    </style> 
</resources> 

Dann meine res/ziehbar/activated_background.xml enthält den nächsten Code:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_activated="true" android:drawable="@color/row_activated" /> 
    <item android:drawable="@android:color/transparent" /> 
</selector> 

schließlich der Code verwendet, um jede Zeile in der Listview definiert ist:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:background="?android:attr/activatedBackgroundIndicator"> 
    <TextView 
      android:id="@+id/test_row" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/sample_string" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:padding="15dp"/> 
</LinearLayout> 

Das Ergebnis wird auf dem Screen gezeigt. Ist eine einfache Anwendung mit nur einem ListView mit ListView.CHOICE_MODE_SINGLE und getListView(). SetItemChecked (Position, True) wenn Listenelement geklickt.

Die blaue Farbe der ausgewählten Standardreihe ist jetzt gelb und funktioniert einwandfrei.

List without ABS

Das Problem erscheint, wenn ich die gleiche Anpassung mit der ActionBarSherlock anwenden möchten. Jetzt Die Style-Datei ist die nächste und der Hintergrund erscheint blau statt der benutzerdefinierten gelb.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme.Custom" parent="Theme.Sherlock.Light.DarkActionBar"> 
     <item name="activatedBackgroundIndicator">@drawable/activated_background</item> 
     <item name="android:activatedBackgroundIndicator">@drawable/activated_background</item> 
    </style> 

    <style name="activatedBackgroundIndicator"> 
     <item name="android:background">?android:attr/activatedBackgroundIndicator</item> 
    </style> 
</resources> 

List with ABS

Ich weiß nicht, ob ActionBarSherlock die android unterstützt: activatedBackgroundIndicator Funktion oder wenn ich etwas zu implementieren vergessen die Standardfarbe der Lage sein, benötigt zu ändern.

Irgendwelche Ideen?

+1

ActionBarSherlock funktioniert das activatedBackgroundIndicator Attribut unterstützen. Warum haben Sie auch einen Stil namens "activatedBackgroundIndicator" in Ihrem XML definiert? –

+0

Ich suchte nach Projekten, die diese Funktionalität implementieren, und ich fand [Put.io] (https://github.com/DSteve595/Put.io/blob/master/res/values/styles.xml) es verwendet. – mlabraca

+0

Ich habe den Stil hinzugefügt, der versucht, dass es funktioniert, aber wenn es nicht notwendig ist, werde ich es löschen. Dann @ Alex-Fu, muss die Implementierung mit ActionBarSherlock der Standard sein? – mlabraca

Antwort

10

Endlich fand ich die Lösung für das Problem.
Es wurde der Kontext im Zeilenadapter verwendet. Der Konstruktor verwendet wird, die in dem folgenden Codeabschnitt gezeigt:

public RowAdapter(Activity activity, ArrayList<String> list) { 
    this.mContext = activity.getApplicationContext(); 
    this.elements = list; 
    this.theActivity = activity; 

    this.inflater = (LayoutInflater) this.mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

nur die Änderung des Kontext aus:
this.mContext = activity.getApplicationContext() (Application-Context)
zu
this.mContext = activity.getBaseContext() (Activity-Context)
gelöst Das Problem und jetzt ist der Hintergrund der benutzerdefinierte.

Wann immer Sie brauchen Ansichten dann genug wäre für Activity-Context, sonst Anwendungskontext gehen zu manipulieren.

Diese answer hat mir geholfen, zu verstehen, warum getBaseContext() verwenden statt getApplicationContext() in meinem Fall.

custom row background

Verwandte Themen