2014-11-03 5 views
5

Da die appcompat v7 eine SwitchCompatPreference fehlt, scheint es notwendig zu sein, sie selbst zu erstellen.Eigene SwitchCompat Preference erstellen

Wie kann dies erreicht werden? Ich habe ein wenig gegoogelt und ein Tutorial für eine DialogPreference gefunden. Ich habe versucht, es für eine SwitchCompatPreference zu adoptieren, aber in meinem XML-Layout heißt es immer, dass diese Klasse in der Präferenz XML nicht erlaubt ist.

Was muss ich tun?

+0

Ich habe meine Antwort bearbeitet. Bitte verwenden Sie die bearbeitete Antwort. – jyoon

Antwort

24

Sie müssen keine neue Komponente erstellen.

Zunächst sollten Sie anstelle von SwitchPreference CheckBoxPreference verwenden, um niedrigere APIs zu unterstützen.

Erstellen Sie mithilfe des vorhandenen Widgets android.support.v7.widget.SwitchCompat eine neue Layoutdatei, z. B. l_switch.xml. Verwenden Sie den folgenden Code ein:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.SwitchCompat xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/checkbox" <!-- IMPORTANT --> 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@null" 
    android:clickable="false" <!-- IMPORTANT --> 
    android:focusable="false" <!-- IMPORTANT --> 
    android:gravity="center" /> 

Dann, um Ihre SwitchPreferenceCheckBoxPreference in PreferenceFragment,

yourSwitch = findPreference("key_for_this_component"); 
yourSwitch.setWidgetLayoutResource(R.layout.l_switch); 

oder direkt auf Ihrem CheckBoxPreference,

android:widgetLayout="@layout/l_switch" 

Dies zwingt die CheckBoxPreference verwendet den SwitchCompat Stil.

+0

Ich benutze diesen Code, und obwohl es das neue SwitchCompat-Widget anzeigt, bleibt die Einstellung niemals bestehen. Sind Sie sich in Ihrem Projekt sicher, dass die Präferenzänderungen tatsächlich bestehen bleiben? – JDJ

+2

Ich habe das gleiche Problem. Ich werde eine Lösung finden und diesen Beitrag aktualisieren. – jyoon

+0

Das funktioniert, aber Sie verlieren die Umschaltanimation des Schalters. Ich hoffe wirklich, dass sie in naher Zukunft eine SwitchCompatPreference erstellen. – JDJ