Je suis débutant dans Java Android Développement. J'utilise la version Eclipse SDK 3.6.1. J'ai une fenêtre de préférences avec deux cases à cocher et un bouton de retour .
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android">
<PreferenceCategory
Android:title="PIN requirement">
<CheckBoxPreference
Android:title="Use PIN"
Android:defaultValue="true"
Android:key="checkboxPref" />
<CheckBoxPreference
Android:title="Don't use PIN"
Android:defaultValue="false"
Android:key="checkboxPref2" />
</PreferenceCategory>
<PreferenceCategory>
<Preference
Android:title="Back"
Android:key="customPref" />
</PreferenceCategory>
</PreferenceScreen>
Comment modifier deux cases dans le groupe Radiobutton?
Si vous avez besoin d'activer ou de désactiver ou de désactiver à l'aide de la goupille, une seule case à cocher sera suffisante dans ce cas (voir exemple code ci-dessous, première catégorie). Les radiobuttons sont généralement utilisés, lorsque vous devez choisir quelque chose dans une liste de paramètres (listpreference) - par exemple (voir exemple code, deuxième catégorie), pour choisir une couleur.
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android">
<PreferenceCategory
Android:title="First Category">
<CheckBoxPreference
Android:title="Using PIN"
Android:defaultValue="false"
Android:key="checkboxPref"
Android:summaryOn="Disable PIN"
Android:summaryOff="Enable PIN"/>
</PreferenceCategory>
<PreferenceCategory
Android:title="Second Category">
<ListPreference
Android:title="Pick your favourite color"
Android:key="listPref"
Android:defaultValue="4"
Android:entries="@array/listArray"
Android:entryValues="@array/listValues" />
</PreferenceCategory>
</PreferenceScreen>
Le code source de cet exemple sera:
public class PreferencesHelpExample extends PreferenceActivity implements OnSharedPreferenceChangeListener {
public static final String KEY_LIST_PREFERENCE = "listPref";
private ListPreference mListPreference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
// Get a reference to the preferences
mListPreference = (ListPreference)getPreferenceScreen().findPreference(KEY_LIST_PREFERENCE);
}
@Override
protected void onResume() {
super.onResume();
// Setup the initial values
mListPreference.setSummary("Current value is " + mListPreference.getEntry().toString());
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
// Unregister the listener whenever a key changes
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// Set new summary, when a preference value changes
if (key.equals(KEY_LIST_PREFERENCE)) {
mListPreference.setSummary("Current value is " + mListPreference.getEntry().toString());
}
}
}
Pour ListPreference, vous aurez également besoin d'un fichier Arrays.xml, situé dans le dossier "Valeurs":
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="listArray">
<item>red</item>
<item>orange</item>
<item>yellow</item>
<item>green</item>
<item>blue</item>
<item>Violet</item>
</string-array>
<string-array name="listValues">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
</string-array>
</resources>
Voir aussi quelques excellents exemples, en travaillant avec la préférence - ils m'ont beaucoup aidé:
Préférences Android;
[.____] Comment créer un groupe de radiobuttons au lieu d'une liste;
[.____] Comment afficher la valeur actuelle d'un Android préférence dans le résumé de la préférence?
Dans certaines situations, avoir des préférences se comporter comme des boutons radio est une fonctionnalité intéressante, un moyen simple d'inclure le texte récapitulatif sous chaque option.
Faire un groupe de cases à cocher se comporter comme un groupe de boutons radio est assez simple. Pour ce faire dans les préférences, enregistrez toutes les cases à cocher du groupe sur le même onperrencechanGangelistener, puis dans cet écouteur Utilisez FindPreference () pour rechercher les autres cases à cocher et appeler SetChecked (Faux);
public boolean onPreferenceChange(Preference preference, Object newValue) {
String key = preference.getKey();
if (key.equals("checkboxPref")) {
//Reset other items
CheckBoxPreference p = (CheckBoxPreference)findPreference("checkboxPref2");
p.setChecked(false);
}
else if (key.equals("checkboxPref2")) {
//Reset other items
CheckBoxPreference p = (CheckBoxPreference)findPreference("checkboxPref");
p.setChecked(false);
}
//Force the current focused checkbox to always stay checked when pressed
//i.e confirms value when newValue is checked (true) and discards newValue
//when newValue is unchecked (false)
return (Boolean)newValue;
}
Le seul inconvénient est que les cases à cocher ne ressembleront pas à des boutons radio ...
essaye ça:
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, @NonNull Preference preference) {
CheckBoxPreference cb1 = null;
CheckBoxPreference cb2 = null;
ListAdapter adapter = preferenceScreen.getRootAdapter();
for(int i = 0; i < preferenceScreen.getRootAdapter().getCount(); i++)
{
//attention to type and key
Preference pref = (Preference) adapter.getItem(i);
if (pref == null || pref.getKey() == null)
continue;
if (pref.getKey().equals(getString(R.string.tag_preference_key_always_zoom_to_akt_position)))
cb1 = (CheckBoxPreference) pref;
if (pref.getKey().equals(getString(R.string.tag_preference_key_always_zoom_to_last_location)))
cb2 = (CheckBoxPreference) pref;
if (cb1 != null && cb2 != null)
break;
}
//be safe
if (cb1 == null || cb2 == null)
return super.onPreferenceTreeClick(preferenceScreen, preference);
if (preference.getKey().equals(getString(R.string.tag_preference_key_always_zoom_to_akt_position))) {
CheckBoxPreference cb = (CheckBoxPreference) preference;
cb2.setChecked(!cb.isChecked());
}
if (preference.getKey().equals(getString(R.string.tag_preference_key_always_zoom_to_last_location))) {
CheckBoxPreference cb = (CheckBoxPreference) preference;
cb1.setChecked(!cb.isChecked());
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}