Y a-t-il un moyen d'utiliser le widget NumberPicker Android pour choisir des chaînes de caractères au lieu d'entiers ?
La clé pour moi ici était que vous devez définir les displayedValues ET le min et le max avant que cela ne fonctionne. Merci.
Y a-t-il un moyen d'utiliser le widget NumberPicker Android pour choisir des chaînes de caractères au lieu d'entiers ?
La clé pour moi ici était que vous devez définir les displayedValues ET le min et le max avant que cela ne fonctionne. Merci.
Mais lorsque je clique sur le texte, le clavier virtuel apparaît et je peux modifier le texte.
NumberPicker numberPicker = new NumberPicker(this);
String[] arrayString= new String[]{"hakuna","matata","timon","et","pumba"};
numberPicker.setMinValue(0);
numberPicker.setMaxValue(arrayString.length-1);
numberPicker.setFormatter(new NumberPicker.Formatter() {
@Override
public String format(int value) {
// TODO Auto-generated method stub
return arrayString[value];
}
});
Si c'est un tableau, alors il n'a pas de méthodes size() et get(). size() devrait être remplacé par .length, and get() remplacé par arrayString[value]
String value = String.valueOf(picker.getValue());
Vous pourriez signifier autre chose, mais ce n'est pas très clair ce que vous voulez dire.
À JOUR:
Vous pouvez le simuler en définissant votre propre formatteur :
CountryFormatter implements Formatter {
public String toString(int value) {
switch(value) {
case 0:
return "Angleterre";
case 1:
return "France";
}
return "Inconnu";
}
}
picker.setFormatter(new CountryFormatter());
getValue() renverra toujours un int, donc vous voudrez probablement faire correspondre les noms des pays à leurs identifiants.
AJOUTÉ : L'implémentation de NumberPicker a :
public void setRange(int start, int end, String[] displayedValues)
Qui semble mieux faire ce que vous voulez que le formatteur ci-dessus.. bien que cela ne soit pas mentionné dans la documentation donc probablement pas partie de l'api publique
Je voudrais l'utiliser pour choisir par exemple un pays. Tout comme le Widget Spinner le fait, mais sans ouvrir de cadre supplémentaire en bas pour choisir une valeur.
Réponse mise à jour, cependant il existe probablement de meilleures façons de répertorier les pays que d'essayer de pirater NumberPicker pour réaliser ce genre de choses.
@FunkTheMonk Je n'ai pas pu trouver cette méthode setRange()
dans la documentation du tout! Des idées pourquoi ?
Essayez cette solution, cela peut vous aider
NumberPicker pickers = new NumberPicker(this);
String[] arrayPicker= new String[]{"abc","def","ghi","jkl","mno"};
//définir la valeur minimale à zéro
pickers.setMinValue(0);
//définir la valeur maximale à partir de la longueur du tableau de chaînes - 1
pickers.setMaxValue(arrayPicker.length - 1);
//implémenter le tableau de chaînes vers le sélecteur de nombres
pickers.setDisplayedValues(arrayPicker);
//désactiver le clavier virtuel
pickers.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
//définir l'option wrap true ou false, essayez pour voir la différence
pickers.setWrapSelectorWheel(false);
//créer un bouton pour tester la chaîne de texte sélectionnée
btnPicker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//obtenir la position (int) du sélecteur de nombres
int pos = pickers.getValue();
//obtenir la chaîne de texte à partir du sélecteur de nombres et de la position
String selecPicker = arrayPicker[pos];
//test de toast pour obtenir la chaîne de texte sélectionnée
Toast.makeText(context, selecPicker , Toast.LENGTH_SHORT).show();
}
});
Cela a fonctionné pour moi.
public class YourClassName extends AppCompatActivity {
NumberPicker picker = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_activity_layout_file);
picker = (NumberPicker) findViewById(R.id.pickerId_From_your_Layout_file);
picker.setMinValue(0);
picker.setMaxValue(3);
picker.setDisplayedValues(new String[]{"Anglais", "Français","Kiswahili","عربى"});
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.