2011-12-30 4 views
3

Decimal値を取るEdittextがあります。だから私は使用しました編集テキストに2つ以上の小数点を置くようにユーザーを制限する方法

android:inputType="numberDecimal" 
android:numeric="decimal" 

今EditTextは小数値を取る。私の質問は、小数点以下2桁まで入力するようにユーザーを制御できますか?

たとえば、1345.99の場合、小数点以下2桁を超えることはできません。

答えて

3

1)彼はこのxxx.xx.ようなものを入力した後、ユーザーが許可しないようにしましょう、2つの解が存在することができ

2)入力して値を保存するか、画面上で操作を行うときは、edittextの値をチェックし、入力された値が目的の形式でない場合はトーストを生成します。

ここでは2番目の解決方法を示します。/

String str = editText.getText().toString(); 

    int indexOFdec = str.indexOf("."); 

    if(indexOFdec >=0) { 
     if(str.substring(indexOFdec).length() >2) 
     { 
      Toast.makeText(getApplicationContext(), "Print a message here", Toast.LENGTH_SHORT).show(); 
      return; 
     } 
    } 

私はそれが動作するかどうか教えてください。

+0

ありがとうございます。上記の方法の1つを要件に従って使用します。 –

+0

これは動作するはずですが、ユーザーがxxx.xxのようなものを入力した後に数値を入力しないようにしたい場合 数値キーボードやその他のものを無効にすることを意味します –

1

XMLでこれを行うことができるかどうかはわかりませんが、getText.toString()を呼び出してEditTextの部分文字列を作成し、必要なトークンを抽出するだけです。小数点の文字を探してください。 " Stringの中に2つのインデックスを抽出します。

1

私は別のウェブサイトでこれを見つけましたが、このコンテンツは回答に許可されていないと言います。

InputFilterのこの実装では、問題を解決:

import android.text.SpannableStringBuilder; 
import android.text.Spanned; 
import android.text.method.DigitsKeyListener; 

public class MoneyValueFilter extends DigitsKeyListener { 
public MoneyValueFilter() { 
    super(false, true); 
} 

private int digits = 2; 

public void setDigits(int d) { 
    digits = d; 
} 

@Override 
public CharSequence filter(CharSequence source, int start, int end, 
     Spanned dest, int dstart, int dend) { 
    CharSequence out = super.filter(source, start, end, dest, dstart, dend); 

    // if changed, replace the source 
    if (out != null) { 
     source = out; 
     start = 0; 
     end = out.length(); 
    } 

    int len = end - start; 

    // if deleting, source is empty 
    // and deleting can't break anything 
    if (len == 0) { 
     return source; 
    } 

    int dlen = dest.length(); 

    // Find the position of the decimal . 
    for (int i = 0; i < dstart; i++) { 
     if (dest.charAt(i) == '.') { 
      // being here means, that a number has 
      // been inserted after the dot 
      // check if the amount of digits is right 
      return (dlen-(i+1) + len > digits) ? 
       "" : 
       new SpannableStringBuilder(source, start, end); 
     } 
    } 

    for (int i = start; i < end; ++i) { 
     if (source.charAt(i) == '.') { 
      // being here means, dot has been inserted 
      // check if the amount of digits is right 
      if ((dlen-dend) + (end-(i + 1)) > digits) 
       return ""; 
      else 
       break; // return new SpannableStringBuilder(source, start, end); 
     } 
    } 

    // if the dot is after the inserted part, 
    // nothing can break 
    return new SpannableStringBuilder(source, start, end); 
} 
} 
+0

それはユーザー名Konstantin Weitz ;大変申し訳ありませんが、このコメントにリンクができない理由がわからないのでリンクできません。 – Kgrover

0

使用TextWatcherあなたのEditTextが含まれていないどのように多くのポイントをチェックします。ポイントの数が1つ以上の場合、EditTextの編集テキスト。

EditText et = new EditText(this); 

et.addTextChangedListener(new TextWatcher() { 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
} 

public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
} 

public void afterTextChanged(Editable s) { 
// Logic to check how many points does contain your EditText 
} 

}); 
関連する問題