Restringindo o Android NumberPicker ao teclado numérico para entrada numérica (não teclado alfa)
Existe uma maneira de sugerir ou restringir a entrada do teclado ao selecionar um NumberPicker, de modo que somente os controles numéricos sejam mostrados ao inserir valores, de forma semelhante ao que você pode usar?android:inputType="number"
com um EditText?
Eu tenho uma série de valores, de 0,0 a 100,0 em incrementos de 0,1 que eu gostaria de ser capaz de usar um NumberPicker para selecionar no Android 4.3. Para ter os números selecionáveis, criei um array de strings que corresponde a esses valores, como mostrado abaixo:
NumberPicker np = (NumberPicker) rootView.findViewById(R.id.programmingNumberPicker);
int numberOfIntensityOptions = 1001;
BigDecimal[] intensityDecimals = new BigDecimal[numberOfIntensityOptions];
for(int i = 0; i < intensityDecimals.length; i++ )
{
// Gets exact representations of 0.1, 0.2, 0.3 ... 99.9, 100.0
intensityDecimals[i] = BigDecimal.valueOf(i).divide(BigDecimal.TEN);
}
intensityStrings = new String[numberOfIntensityOptions];
for(int i = 0; i < intensityDecimals.length; i ++)
{
intensityStrings[i] = intensityDecimals[i].toString();
}
// this will allow a user to select numbers, and bring up a full keyboard. Alphabetic keys are
// ignored - Can I somehow change the keyboard for this control to suggest to use *only* a number keyboard
// to make it much more intuitive?
np.setMinValue(0);
np.setMaxValue(intensityStrings.length-1);
np.setDisplayedValues(intensityStrings);
np.setWrapSelectorWheel(false);
Quanto mais informações, eu notei que se eu não usar osetDisplayedValues()
método e, em vez disso, definir os números inteiros diretamente, o teclado numéricovai ser usado, mas o problema aqui é que o número que está sendo inserido é 10 vezes mais do que deveria ser - por exemplo se você inserir "15" no controle, será interpretado como "1.5"
// This will allow a user to select using a number keyboard, but input needs to be 10x more than it should be.
np.setMinValue(0);
np.setMaxValue(numberOfIntensityOptions-1);
np.setFormatter(new NumberPicker.Formatter() {
@Override
public String format(int value) {
return BigDecimal.valueOf(value).divide(BigDecimal.TEN).toString();
}
});
Alguma sugestão sobre como levantar um teclado numérico para permitir que um usuário insira números decimais como este?