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();
}
}
También puede usar la biblioteca android-switch-backport que tiene un SwitchPreference que funciona en Android 2.1+.
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