usar preferencia from data como code archivos and android preferences

from - Android: usando Preferencia de Switch pre API nivel 14



save and get data from sharedpreferences android (5)

Pre-API Nivel 14 no hay preferencia de cambio. Si uso preferences.xml para crear mi pantalla de preferencias, ¿hay alguna manera de distinguir entre los niveles de API? ¿Entonces, tener una casilla de verificación para versiones anteriores y un cambio para API 14?

Cúal seria la mejor manera?


Si uso preferences.xml para crear mi pantalla de preferencias, ¿hay alguna manera de distinguir entre los niveles de API? ¿Entonces, tener una casilla de verificación para versiones anteriores y un cambio para API 14?

Cree un directorio res/xml-v14/ que contenga un preferences.xml que tenga su SwitchPreference . Cree un directorio res/xml/ que contenga un archivo preferences.xml que reemplace SwitchPreference con un CheckBoxPreference . Android cargará la edición correcta del archivo preferences.xml en función de la versión del dispositivo en la que se ejecuta la aplicación.


Hay una solución alternativa que no estoy seguro de cuán completa está, ajustando qué vista usar en el CheckBoxPreference (puede perder algunas funciones, pero en general, funciona).

La solución alternativa utilizará CheckBoxPreference para pre-API-14 y SwitchPreference para API 14 y superiores.

Aquí está el código:

public class SwitchPreference extends CheckBoxPreference { android.preference.SwitchPreference _switchPreference =null; public SwitchPreference(final Context context) { super(context); if(VERSION.SDK_INT>=VERSION_CODES.ICE_CREAM_SANDWICH) _switchPreference=new android.preference.SwitchPreference(context); } public SwitchPreference(final Context context,final AttributeSet attrs) { super(context,attrs); if(VERSION.SDK_INT>=VERSION_CODES.ICE_CREAM_SANDWICH) _switchPreference=new android.preference.SwitchPreference(context,attrs); } public SwitchPreference(final Context context,final AttributeSet attrs,final int defStyle) { super(context,attrs,defStyle); if(VERSION.SDK_INT>=VERSION_CODES.ICE_CREAM_SANDWICH) _switchPreference=new android.preference.SwitchPreference(context,attrs,defStyle); } @Override protected View onCreateView(final ViewGroup parent) { final View view; if(VERSION.SDK_INT>=VERSION_CODES.ICE_CREAM_SANDWICH) { view=_switchPreference.getView(null,parent); // set as checked the view and the view''s children, each in case it extend from Checkable ViewUtil.setChecked(view,isChecked()); // set as non-clickable the view and the view''s children ViewUtil.setClickable(view,false); } else view=super.onCreateView(parent); return view; }


Prueba este código:

public class SettingsActivity extends PreferenceActivity { @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_settings); PreferenceScreen rootScreen = getPreferenceManager() .createPreferenceScreen(this); setPreferenceScreen(rootScreen); Preference NotifCheck=null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { NotifCheck = new SwitchPreference(this); } else { NotifCheck = new CheckBoxPreference(this); } NotifCheck.setKey("ShowNotification"); NotifCheck.setTitle(R.string.ShowNotification); NotifCheck.setEnabled(true); rootScreen.addPreference(NotifCheck); // Show the Up button in the action bar. setupActionBar(); } }



puede utilizar SwitchCompat:

<android.support.v7.widget.SwitchCompat android:id="@+id/switch_compat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:checked="true" android:textOff="OFF" android:textOn="ON" app:showText="false" android:focusable="false" android:focusableInTouchMode="false"/>

en setOnCheckedChangeListener:

SwitchCompat switchCompat = (SwitchCompat)convertView.findViewById(R.id.switch_compat); switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { textView.setText("check"); } else { textView.setText("unCheck"); } } });

espero te ayude