2017-06-25 4 views
0

Ich möchte einen Text eines Titels einer Vorliebe, um seine Farbe in weiß zu ändern, wenn eine andere Präferenz (a SwitchPreference) geändert wird. Wenn die andere Präferenz geändert ich Aufruf dieser Methode aus dem onPreferenceChange Zuhörer:Präferenz Titel Textfarbe ändern den richtigen Weg

private void enableSettingsGui(boolean enable) 
{ 
    View preferenceView = getListView().getChildAt(myPref.getOrder()); 
    TextView title = (TextView)preferenceView.findViewById(android.R.id.title); 
    title.setTextColor(getResources().getColor(R.color.white)); 
} 

Nun gibt es zwei Szenarien:

1) Wenn ich in der onPreferenceChange Methode true bin Rückkehr der Schalter Die SwitchPreference wird korrekt geändert (bedeutet, dass sie nach links oder rechts in den neuen Status von aktiviert oder deaktiviert verschoben wird), aber die Farbe des Titels der betroffenen Einstellung wird nicht geändert.

2) Wenn ich von onPreferenceChange falsch zurückkomme, ändert sich der Schalter nicht, jedoch ändert sich die Titeltextfarbe plötzlich.

Wie kann ich es richtig machen?

Antwort

1

Verwendung dieser besonders anfertigen PreferenceCategory Klasse:

public class MyPreferenceCategory extends PreferenceCategory { 
    public MyPreferenceCategory(Context context) { 
     super(context); 
    } 

    public MyPreferenceCategory(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public MyPreferenceCategory(Context context, AttributeSet attrs, 
      int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onBindView(View view) { 
     super.onBindView(view); 
     TextView titleView = (TextView) view.findViewById(android.R.id.title); 
     titleView.setTextColor(Color.RED); 
    } 
} 

und fügen Sie diese in Ihrer Pref.xml Datei:

<ali.UI.Customize.MyPreferenceCategory android:title="@string/pref_server" /> 
+0

aber im einen Titel eines einzigen Vorzug zu färben versuchen, keine Kategorie –

+0

auch an einer anderen Präferenz gesetzt, ich versuche, den Text entsprechend einem Wert zu färben und es nicht ständig Farbe –

+0

, wenn Sie diese wie es – Dhiyaneshwaran

0

Ich habe das Problem gelöst.

die Dokumentation Nach onPreferenceChange in Bezug auf, ist der Rückgabewert

„Stimmt den Zustand der Präferenz mit dem neuen Wert zu aktualisieren.“

Das bedeutet, dass der Schalter, da die Rückkehr geändert Wert sagte ihm, den Staat zu aktualisieren. Die Farbe schien nicht gesetzt zu sein, tat es aber tatsächlich, nur um den Zustand zu ändern, wurde die Methode der Präferenz erneut aufgerufen, wodurch die Farbänderung überschrieben wurde.

Was ich tat, war die setEnabled Methode wie folgt außer Kraft zu setzen:

@Override 
public void setEnabled(boolean enabled) 
{ 
    super.setEnabled(enabled); 
    shouldEnable = enabled; 
} 

Und dann in onCreate hinzugefügt, um die Zeile: setTitleTextColor(shouldEnable); welche Farbe der Text nach den aktivierten Zustand. Auf diese Weise wurden die Änderungen vorgenommen, NACHDEM die Ansicht wiederhergestellt wurde und die Farbe erhalten blieb.