0

我有一个 EditText,我在其中输入一个数字。

我想要的是禁止这个数字有超过“x”的小数位数,例如三个。

我试图通过使用监听器来做到这一点,但我没有找到确切的解决方案......

precioProducto.addTextChangedListener(new TextWatcher(){
                public void afterTextChanged(Editable s) {

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

                }
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    String[] numeroDecimal = s.toString().split(",");
                    if(numeroDecimal[1].length()==3){

                    }
                }
            });

我怎样才能“锁定”EditText 超过 3 位小数?

非常感谢。


我尝试了 Vinay Wadhwa 告诉我的内容,但在尝试了一些之后,有时(不是每次),应用程序会中断,给我下一个日志:

09-07 11:37:32.119:E/AndroidRuntime(14586):致命异常:主要 09-07 11:37:32.119:E/AndroidRuntime(14586):java.lang.StackOverflowError 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.text.method.ReplacementTransformationMethod$ReplacementCharSequence.getChars(ReplacementTransformationMethod.java:151) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.text.TextUtils.getChars (TextUtils.java:70) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.text.TextUtils.indexOf(TextUtils.java:103) 09-07 11:37:32.119: E/AndroidRuntime (14586): 在 android.text.StaticLayout.generate(StaticLayout.java:182) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.text.DynamicLayout.reflow(DynamicLayout.java:283) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.text.DynamicLayout.(DynamicLayout.java:169) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.makeSingleLayout(TextView.java:6318) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在android.widget.TextView.makeNewLayout(TextView.java:6216) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.checkForRelayout(TextView.java:6744) 09-07 11: 37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3306) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText (TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime (14586): 在 android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 es.wul4.zarko.CrearPedidos 25 美元。onTextChanged(CrearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/ AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3162 ) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android .widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 es.wul4.zarko.CrearPedidos$25.onTextChanged(CrearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586):在 android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3162) 09-07 11 :37:32.119: E/AndroidRuntime(14586): 在 android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView。 setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 es.wul4.zarko.CrearPedidos$25.onTextChanged(CearPedidos.java:686) 09-07 11:37:32.119 : E/AndroidRuntime(14586): 在 android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView. java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119:E/AndroidRuntime(14586): 在 android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java :3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 es.wul4.zarko.CearPedidos$25.onTextChanged(CearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime( 14586): 在 android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3309) 09 -07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget .EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32 .119: E/AndroidRuntime(14586): 在 es.wul4.zarko.CrearPedidos$25.onTextChanged(CearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView。 sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/ AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.EditText.setText(EditText.java:78 ) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 es .wul4.zarko.CrearPedidos$25.onTextChanged(CearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586) : 在 android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 es.wul4.zarko .CrearPedidos$25.onTextChanged(CearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37: 32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView。setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/ AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 es.wul4.zarko.CrearPedidos$25.onTextChanged(CrearPedidos. java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586) : 在 android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget。TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 es.wul4.zarko.CrearPedidos$25.onTextChanged(CearPedidos.java:686) 09-07 11:37 :32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText( TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime( 14586): 在 android.widget.EditText.setText(EditText.java:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView .java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.EditText.setText(EditText.java:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.TextView.setText(TextView .java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): 在 android.widget.EditText.setText(EditText.java:

我不知道为什么给我这个问题,甚至不是每次.......只是有时在“触摸”里面的文字太多次之后

4

2 回答 2

1

添加一个类变量,该变量存储编辑文本的最后一个先前值

String lastVal

 precioProducto.addTextChangedListener(new TextWatcher(){
                    public void afterTextChanged(Editable s) {

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

                    }
                    public void onTextChanged(CharSequence s, int start, int before, int count) {                      

                        String[] numeroDecimal = s.toString().split(",");
                        if(numeroDecimal[1].length()>=3){
                          precioProducto.setText(lastVal);
                        }
                        lastVal=s.toString();
                    }
                });
于 2012-09-06T11:58:41.870 回答
0

请在您的 XML 文件的 EditText 中添加以下内容。

android:maxLength="3"
于 2012-09-06T11:51:15.963 回答