Есть ли способ использовать виджет Android NumberPicker для выбора строк вместо целых чисел?
98
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]; } });
надеюсь, это поможет!
источник
setDisplayedValues
, NumberPicker не будет правильно измерять его ширину, поэтому ваш текст может быть обрезан, даже если он может поместиться должным образом.String value = String.valueOf(picker.getValue());
Вы могли иметь в виду что-то другое, но не совсем понятно, что вы имеете в виду.
ОБНОВЛЕНО:
Вы можете подделать его, установив собственный форматер:
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 () по-прежнему будет возвращать int, поэтому вы, вероятно, захотите сопоставить названия стран с их идентификаторами.
ДОБАВЛЕНО: В реализации NumberPicker есть:
public void setRange(int start, int end, String[] displayedValues)
Который, кажется, лучше справляется с тем, что вы хотите, чем вышеуказанный форматировщик .. хотя он не упоминается в документации, поэтому, вероятно, не является частью общедоступного API
источник
setRange()
метод в документации! Есть идеи, почему?попробуйте это решение, может вам помочь
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(); } });
источник
Это сработало для меня.
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","عربى"}); } }
источник