Limitazione di Android NumberPicker alla tastiera numbersca per l'immissione numbersca (non la tastiera Alpha)

C'è un modo per suggerire o limitare l'input della tastiera quando si seleziona un NumeroPicker, per cui solo i controlli numbersci vengono visualizzati quando si immettono valori simili a come si può usare android:inputType="number" con un EditText?

Ho una serie di valori, da 0,0 a 100,0 in 0,1 incrementi che vorrei poter utilizzare un NumeroPicker per select in Android 4.3. Per avere i numbers selezionabili, ho creato una serie di stringhe che corrispondono a questi valori, come mostrato di seguito:

  • Come gestire più Async Tasks in modo efficiente in Android
  • JSONParser non può essere risolto a un tipo
  • Come rilevare in modo programmato se un'app-app support Android Wear?
  • Ottieni l'altezza della tastiera virtuale in Android
  • Android: fare un button visibile una volta che il webview è fatto scorrere
  • Android: visualizza le cifre in formato arabo
  •   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); 

    Come più informazioni, ho notato che se non utilizzo il metodo setDisplayedValues() e invece ho impostato direttamente gli interi, verrà utilizzata la tastiera numbersca, ma il problema è che il numero inserito è 10 volte superiore a quello che dovrebbe essere – ad esempio se entrate "15" nel controllo il suo interpretato come "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(); } }); 

    Quali suggerimenti su come sollevare una tastiera numbersca per consentire a un utente di inserire numbers decimali come questo?

    2 Solutions collect form web for “Limitazione di Android NumberPicker alla tastiera numbersca per l'immissione numbersca (non la tastiera Alpha)”

    Ho realizzato con successo questo problema, prestando pesantemente la risposta utile di @ LuksProg ad un'altra domanda. L'idea di base è cercare il componente EditText del NumberPicker e quindi assegnare il tipo di input come numbersco. Primo aggiungere questo metodo (grazie ancora a @LuksProg):

     private EditText findInput(ViewGroup np) { int count = np.getChildCount(); for (int i = 0; i < count; i++) { final View child = np.getChildAt(i); if (child instanceof ViewGroup) { findInput((ViewGroup) child); } else if (child instanceof EditText) { return (EditText) child; } } return null; } 

    Quindi, nel metodo onCreate () di questa attività, lo chiamo e imposta il tipo di input:

     np.setMinValue(0); np.setMaxValue(intensityStrings.length-1); EditText input = findInput(np); input.setInputType(InputType.TYPE_CLASS_NUMBER); 

    Questo è stato il trucco per me!

    La mia risposta è migliorare in base a Alan Moore, solo cambiare l'ultima linea

      input.setInputType(InputType.TYPE_CLASS_NUMBER); 

    a

      input.setRawInputType(InputType.TYPE_CLASS_NUMBER); 

    poi non ci sarà più problema come ha detto personne3000, non più crash. Mi dispiace che il mio inglese non sia buono, ma spero che tu possa capire cosa intendo.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.