web-dev-qa-db-ja.com

Kotlinを使用してEditTextで入力タイプとフォーマットを設定するにはどうすればよいですか?

ユーザーに数値の入力を強制したいのですが、それを使用しています(それで問題ありません)。

Android:inputType="number"

ユーザーに入力を2つの数値だけにするように強制します(IntまたはDoubleは関係ありません)。これらの数値は0から20(または0.0から20.0)の間でなければなりません。たとえば、0または0.0 1または1.5(1.0など)です。 。 。 20または20.0

5
Anis KONIG

これが私がこれをするのが好きな方法です:

これを編集テキストに追加

 Android:inputType="numberDecimal"  

(または)

Android:digits="0123456789."

Kotlin ::

class InputFilterMinMax(min:Float, max:Float):InputFilter {
  private val min:Float = 0.toFloat()
  private val max:Float = 0.toFloat()
  init{
    this.min = min
    this.max = max
  }
  fun filter(source:CharSequence, start:Int, end:Int, dest:Spanned, dstart:Int, dend:Int):CharSequence {
    try
    {
      val input = (dest.subSequence(0, dstart).toString() + source + dest.subSequence(dend, dest.length())).toFloat()
      if (isInRange(min, max, input))
      return null
    }
    catch (nfe:NumberFormatException) {}
    return ""
  }
  private fun isInRange(a:Float, b:Float, c:Float):Boolean {
    return if (b > a) c >= a && c <= b else c >= b && c <= a
  }
}

次に、EditTextにフィルターを設定します。

myEditText.setFilters(arrayOf<InputFilter>(InputFilterMinMax(0.0, 20.0)))

Java:

public class InputFilterMinMax implements InputFilter {
    private float min;
    private float max;

    public InputFilterMinMax(float min, float max) {
        this.min = min;
        this.max = max;
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        //noinspection EmptyCatchBlock
        try {
            float input = Float.parseFloat(dest.subSequence(0, dstart).toString() + source + dest.subSequence(dend, dest.length()));
            if (isInRange(min, max, input))
                return null;
        } catch (NumberFormatException nfe) { }
        return "";
    }

    private boolean isInRange(float a, float b, float c) {
        return b > a ? c >= a && c <= b : c >= b && c <= a;
    }
}

次に、EditTextにフィルターを設定します。

myEditText.setFilters(new InputFilter[]{new InputFilterMinMax(0.0, 20.0)});
2
King of Masses
0
Jcov