Pré-API niveau 14, il n'y a pas de préférence de commutateur. Si j'utilise preferences.xml pour créer mon écran de préférences, existe-t-il un moyen de distinguer les niveaux d'API? Vous avez donc une case à cocher pour les anciennes versions et un commutateur pour l'API 14?
Quel serait le meilleur moyen?
Si j'utilise preferences.xml pour créer mon écran de préférences, existe-t-il un moyen de distinguer les niveaux d'API? Vous avez donc une case à cocher pour les anciennes versions et un commutateur pour l'API 14?
Créez un répertoire res/xml-v14/
contenant un preferences.xml
avec votre SwitchPreference
. Créez un répertoire res/xml/
qui contient un fichier preferences.xml
qui remplace la SwitchPreference
par une CheckBoxPreference
. Android chargera la bonne édition de fichier preferences.xml
en fonction de la version de l'appareil sur laquelle l'application est exécutée.
Vous pouvez également utiliser la bibliothèque Android-switch-backport qui possède un SwitchPreference qui fonctionne sur Android 2.1+.
Il existe une solution de contournement dont je ne suis pas sûr du volume, en indiquant quelle vue utiliser dans CheckBoxPreference (certaines fonctions risquent d'être omises, mais en général, cela fonctionne).
La solution de contournement utilisera CheckBoxPreference pour pré-API-14 et SwitchPreference pour API 14 et versions ultérieures.
Voici le code:
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;
}
vous pouvez utiliser 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"/>
sur 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");
}
}
});
j'espère vous aider.
Essayez ce code:
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();
}
}