¿Hay alguna forma de usar el widget de NumberPicker de Android para elegir cadenas en lugar de enteros?
¿Hay alguna forma de usar el widget de NumberPicker de Android para elegir cadenas en lugar de enteros?
Respuestas:
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];
}
});
¡Espero que ayude!
setDisplayedValues, NumberPicker no medirá su ancho correctamente, por lo que su texto podría recortarse incluso si puede ajustarse correctamente.
String value = String.valueOf(picker.getValue());
Podría querer decir otra cosa, pero no está muy claro a qué se refiere.
ACTUALIZADO:
Puedes falsificarlo configurando tu propio formateador:
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 () seguirá devolviendo un int, por lo que probablemente desee asignar los nombres de los países a sus identificadores.
AÑADIDO: La implementación de NumberPicker tiene:
public void setRange(int start, int end, String[] displayedValues)
Lo que parece hacer un mejor trabajo de lo que desea que el formateador anterior ... aunque no se menciona en la documentación, probablemente no sea parte de la API pública
setRange()método en los documentos! ¿Alguna idea de por qué?
prueba esta solución, puede ayudarte
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();
}
});
Esto funcionó para mí.
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","عربى"});
}
}