Autore Topic: Come fare in modo che un utente non cancelli un suffisso settato in un EditText?  (Letto 235 volte)

Offline sismouse

  • Utente junior
  • **
  • Post: 70
  • Respect: 0
    • Mostra profilo
Salve,
ho creato un form nel quale ho inserito un EditText che prende in input un numero decimale (ho settato android:inputType="numberDecimal" nell'XML) e ho impostato un filtro (usando .setFilters()) per fare in modo che l'utente non inserisca più di due cifre dopo il punto. Inoltre ho settato un testo fisso alla fine della casella, ovvero un suffisso, che vorrei non fosse rimosso dall'utente durante l'inserimento del suo input. In particolare vorrei che se l'utente si posiziona alla fine, cioè dopo il suffisso, e preme il pulsante backspace, il cursore deve scorrere all'indietro saltando appunto il suffisso e cancellando, eventualmente, soltanto l'input da lui inserito. Spero di essermi spiegato :)

Codice: [Seleziona]
public class InputForm extends Activity {
    EditText inputField;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.input_form);   

        inputField = (EditText) findViewById(R.id.editInput);
        inputField.setText(" m");
        inputField.setSelection(0);

        inputField.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(2)});
}

    public class DecimalDigitsInputFilter implements InputFilter {
        Pattern mPattern;
        public DecimalDigitsInputFilter(int digitsAfterZero) {
            mPattern = Pattern.compile("[0-9]+((\\.[0-9]{0," + (digitsAfterZero-1) + "})?)||(\\.)?");
        }
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            int input_length = dest.length() - 2; // lenght of the input without " m"

            Matcher matcher = mPattern.matcher(dest.subSequence(0, input_length));

            if(!matcher.matches())
                return "";

            return null;
        }
    }
}