Reputation: 2638
I have a EditText where I enter a number.
What I want is to forbid this number to have more than "x" number of decimals, for example, three.
I have tried to do it by using the listener, but I don´t find exactly the solution.......
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){
}
}
});
How can i "lock" the EditText to be more than 3 decimals??
Thanks a lot.
I tried what Vinay Wadhwa told me, but after trying a little bit and so on, sometimes(not everytimes), the application breaks giving me the next log:
09-07 11:37:32.119: E/AndroidRuntime(14586): FATAL EXCEPTION: main 09-07 11:37:32.119: E/AndroidRuntime(14586): java.lang.StackOverflowError 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.text.method.ReplacementTransformationMethod$ReplacementCharSequence.getChars(ReplacementTransformationMethod.java:151) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.text.TextUtils.getChars(TextUtils.java:70) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.text.TextUtils.indexOf(TextUtils.java:103) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.text.StaticLayout.generate(StaticLayout.java:182) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.text.DynamicLayout.reflow(DynamicLayout.java:283) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.text.DynamicLayout.(DynamicLayout.java:169) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.makeSingleLayout(TextView.java:6318) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.makeNewLayout(TextView.java:6216) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.checkForRelayout(TextView.java:6744) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3306) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): at es.wul4.zarko.CrearPedidos$25.onTextChanged(CrearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): at es.wul4.zarko.CrearPedidos$25.onTextChanged(CrearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): at es.wul4.zarko.CrearPedidos$25.onTextChanged(CrearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): at es.wul4.zarko.CrearPedidos$25.onTextChanged(CrearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): at es.wul4.zarko.CrearPedidos$25.onTextChanged(CrearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): at es.wul4.zarko.CrearPedidos$25.onTextChanged(CrearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): at es.wul4.zarko.CrearPedidos$25.onTextChanged(CrearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): at es.wul4.zarko.CrearPedidos$25.onTextChanged(CrearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.EditText.setText(EditText.java:78) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3137) 09-07 11:37:32.119: E/AndroidRuntime(14586): at es.wul4.zarko.CrearPedidos$25.onTextChanged(CrearPedidos.java:686) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.sendOnTextChanged(TextView.java:7634) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3309) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.TextView.setText(TextView.java:3162) 09-07 11:37:32.119: E/AndroidRuntime(14586): at android.widget.EditText.setText(EditText.java:
I don´t know why is giving me this problem, not even everytimes.......just sometimes after "touching" too many times the text inside
Upvotes: 0
Views: 1077
Reputation: 16196
Please add below in EditText in your XML file.
android:maxLength="3"
Upvotes: 0
Reputation: 10190
add a class variable which stores the last previous value of the edit text
say 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();
}
});
Upvotes: 1