103 votes

Utilisation du widget NumberPicker avec des chaînes de caractères

Y a-t-il un moyen d'utiliser le widget NumberPicker Android pour choisir des chaînes de caractères au lieu d'entiers ?

251voto

nan Points 546
NumberPicker picker = new NumberPicker(this);
picker.setMinValue(0);
picker.setMaxValue(2);
picker.setDisplayedValues( new String[] { "Belgique", "France", "Royaume-Uni" } );

3 votes

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.

0 votes

C'est beaucoup mieux que la réponse choisie ci-dessus.

2 votes

Mais lorsque je clique sur le texte, le clavier virtuel apparaît et je peux modifier le texte.

39voto

hars Points 1
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];
  }
});

0 votes

C'est de loin la meilleure réponse.

0 votes

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]

0 votes

Si vous utilisez un formateur au lieu de setDisplayedValues, le NumberPicker ne mesurera pas correctement sa largeur, donc votre texte risque d'être coupé même s'il peut s'adapter correctement.

15voto

FunkTheMonk Points 6639
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

0 votes

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.

0 votes

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.

0 votes

@FunkTheMonk Je n'ai pas pu trouver cette méthode setRange() dans la documentation du tout! Des idées pourquoi ?

7voto

Irvan Dwi Pangga Points 120

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();

        }
    });

1voto

NelsonRoberts Points 109

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.com

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.

Powered by:

X