Existe-t-il un moyen d'utiliser le widget Android NumberPicker pour choisir des chaînes au lieu d'entiers?
Existe-t-il un moyen d'utiliser le widget Android NumberPicker pour choisir des chaînes au lieu d'entiers?
Réponses:
NumberPicker picker = new NumberPicker(this);
picker.setMinValue(0);
picker.setMaxValue(2);
picker.setDisplayedValues( new String[] { "Belgium", "France", "United Kingdom" } );
NumberPicker numberPicker = new NumberPicker(this);
String[] arrayString= new String[]{"hakuna","matata","timon","and","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];
}
});
J'espère que cela pourra aider!
setDisplayedValues, le NumberPicker ne mesurera pas sa largeur correctement, votre texte peut donc être tronqué même s'il peut s'adapter correctement.
String value = String.valueOf(picker.getValue());
Vous pourriez vouloir dire autre chose, mais ce que vous voulez dire n'est pas très clair.
ACTUALISÉ:
Vous pouvez le simuler en définissant votre propre formateur:
CountryFormatter implements Formatter {
public String toString(int value) {
switch(value) {
case 0:
return "England";
case 1:
return "France";
}
return "Unknown";
}
}
picker.setFormatter(new CountryFormatter());
getValue () renverra toujours un int, donc vous voudrez probablement mapper les noms des pays à leurs identifiants.
AJOUTÉ: L'implémentation de NumberPicker a:
public void setRange(int start, int end, String[] displayedValues)
Ce qui semble faire un meilleur travail de ce que vous voulez que le formateur ci-dessus .. bien qu'il ne soit pas mentionné dans la documentation, donc ne fait probablement pas partie de l'API publique
setRange()méthode dans la documentation! Des idées pourquoi?
essayez cette solution, peut vous aider
NumberPicker pickers = new NumberPicker(this);
String[] arrayPicker= new String[]{"abc","def","ghi","jkl","mno"};
//set min value zero
pickers.setMinValue(0);
//set max value from length array string reduced 1
pickers.setMaxValue(arrayPicker.length - 1);
//implement array string to number picker
pickers.setDisplayedValues(arrayPicker);
//disable soft keyboard
pickers.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
//set wrap true or false, try it you will know the difference
pickers.setWrapSelectorWheel(false);
//create button to test selected text string
btnPicker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//get position (int) from number picker
int pos = pickers.getValue();
//get string from number picker and position
String selecPicker = arrayPicker[pos];
//test toast to get selected text string
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[]{"English", "French","Kiswahili","عربى"});
}
}