2014-11-03 17 views
5

Dato che l'appcompat v7 manca uno SwitchCompatPreference, sembra che sia necessario crearlo da solo.Crea preferenza proprio SwitchCompat

Come può essere ottenuto? Ho cercato un po 'su google e ho trovato un tutorial per un DialogPreference. Ho provato ad adottarlo per un SwitchCompatPreference ma nel mio layout xml dice sempre che questa classe non è consentita nella preferenza xml.

Cosa devo fare?

+0

Ho modificato la mia risposta. Si prega di utilizzare la risposta modificata. – jyoon

risposta

24

Non è necessario creare un nuovo componente.

Prima di tutto, è necessario utilizzare CheckBoxPreference anziché SwitchPreference per supportare API inferiori.

Utilizzando il widget esistente android.support.v7.widget.SwitchCompat, creare un nuovo file di layout, ad esempio l_switch.xml. Utilizzare il seguente codice:

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

Poi, alla tua SwitchPreferenceCheckBoxPreference in PreferenceFragment,

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

o, al vostro CheckBoxPreference direttamente,

android:widgetLayout="@layout/l_switch" 

Questo costringerà la CheckBoxPreference per utilizzare lo stile SwitchCompat.

+0

Sto usando questo codice e, mentre mostra il nuovo widget SwitchCompat, la preferenza non persiste mai. Nel tuo progetto, sei sicuro che stia effettivamente continuando a cambiare le preferenze? – JDJ

+2

Ho lo stesso problema. Troverò una soluzione e aggiornerò questo post. – jyoon

+0

Funziona ma si perde l'animazione di commutazione dell'interruttore. Spero davvero che creino uno SwitchCompatPreference nel prossimo futuro. – JDJ

Problemi correlati