android_Edittext 两位小数输入,可用于价格计算器
2016-11-03 17:30
495 查看
package com.example.mathedittextdemo;
import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.widget.EditText;
/**
* @author wilin
*/
public class MainActivity extends Activity implements TextWatcher {
private EditText editText;
private int index = 0; // 输入内容前的下标
private boolean isSettext = false;
private int time = 0; // time 标识输入字符数,用来判断长度是否超过0.00的长度,即4 = 3+1
private String originString; // 输入前的字符串,判断是输入还是删除
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.edittext);
editText.setText("0.00");
editText.setSelection(4);
editText.addTextChangedListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
index = editText.getSelectionEnd();
originString = new String(s.toString());
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!isSettext) {// 为使在setText的时候不重复调用
if (s.length() > originString.length()) {
// 输入数字
String newString = new String(s.toString());
newString = newString.replace(".", "");
if (time < 3 && index == newString.length() && newString.startsWith("0")) {
newString = newString.substring(1, newString.length());
}
String a = String.valueOf(Long.valueOf(newString.substring(0, newString.length() - 2))); // 整数部分
StringBuilder sb = new StringBuilder(a);
sb.append(".").append(newString.subSequence(newString.length() - 2,newString.length())); // 小数部分
String tmp = sb.toString();
isSettext = true;
editText.setText(tmp);
// 更新数字
editText.setSelection(tmp.length());
time++;
} else {
// 删除数字
if (time != 0) {
String newString = new String(s.toString());
newString = newString.replace(".", "");
if (newString.length() < 3)
//如果没有整数部分,整数部分置0
newString = "0".concat(newString);
StringBuilder sb = new StringBuilder(newString.substring(0, newString.length() - 2)).append(".")
.append(newString.subSequence(newString.length() - 2,newString.length()));
String tmp = sb.toString();
isSettext = true;
editText.setText(tmp);
editText.setSelection(tmp.length());
time--;
} else {
// 删除掉所有输入
isSettext = true;
editText.setText("0.00");
// index = 4;
editText.setSelection(4);
}
}
} else {
isSettext = false;
editText.setSelection(s.length());
}
}
@Override
public void afterTextChanged(Editable s) {
}
}
import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.widget.EditText;
/**
* @author wilin
*/
public class MainActivity extends Activity implements TextWatcher {
private EditText editText;
private int index = 0; // 输入内容前的下标
private boolean isSettext = false;
private int time = 0; // time 标识输入字符数,用来判断长度是否超过0.00的长度,即4 = 3+1
private String originString; // 输入前的字符串,判断是输入还是删除
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.edittext);
editText.setText("0.00");
editText.setSelection(4);
editText.addTextChangedListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
index = editText.getSelectionEnd();
originString = new String(s.toString());
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!isSettext) {// 为使在setText的时候不重复调用
if (s.length() > originString.length()) {
// 输入数字
String newString = new String(s.toString());
newString = newString.replace(".", "");
if (time < 3 && index == newString.length() && newString.startsWith("0")) {
newString = newString.substring(1, newString.length());
}
String a = String.valueOf(Long.valueOf(newString.substring(0, newString.length() - 2))); // 整数部分
StringBuilder sb = new StringBuilder(a);
sb.append(".").append(newString.subSequence(newString.length() - 2,newString.length())); // 小数部分
String tmp = sb.toString();
isSettext = true;
editText.setText(tmp);
// 更新数字
editText.setSelection(tmp.length());
time++;
} else {
// 删除数字
if (time != 0) {
String newString = new String(s.toString());
newString = newString.replace(".", "");
if (newString.length() < 3)
//如果没有整数部分,整数部分置0
newString = "0".concat(newString);
StringBuilder sb = new StringBuilder(newString.substring(0, newString.length() - 2)).append(".")
.append(newString.subSequence(newString.length() - 2,newString.length()));
String tmp = sb.toString();
isSettext = true;
editText.setText(tmp);
editText.setSelection(tmp.length());
time--;
} else {
// 删除掉所有输入
isSettext = true;
editText.setText("0.00");
// index = 4;
editText.setSelection(4);
}
}
} else {
isSettext = false;
editText.setSelection(s.length());
}
}
@Override
public void afterTextChanged(Editable s) {
}
}
相关文章推荐
- android editText 控制输入最大值、保留两位小数、保留小数点前面两位数
- Android限定EditText的输入类型为数字或者英文(包括大小写),EditText,TextView只能输入两位小数
- Android-EditText两种方法限制输入两位小数
- Android使用EditText输入浮点型数字设置第一位不能输入小数点并且保留两位小数
- Android EditText 限制输入类型数字或小数,并且小数位数限定为两位
- Android怎么让EditText只显示两位小数(格式化法)
- Android EditText实现只能输入几位整数几位小数
- Android EditText限制输入两位小数
- android EditText控件可输入正负数及小数位
- android输入框输入价格,小数点后留两位简单实现
- EditText中输入金额保留两位小数
- 【Android】设置EditText为仅输入数字且最多只能有两位数字
- android EditText最多输入两位小数&不能以小数点开头&最多一个小数点
- Android EditText 在光标处插入,删除内容(例如可用于表情文字输入控件)
- Android 设置EditText为仅输入数字且最多只能有两位数字
- EditText保留两位小数并输入不超过最大值
- android EditText控件可输入正负数及小数位
- Android小技巧(二)监听EditText是否输入完毕(用于机器扫码自动输入)
- EditText设置输入仅能输入两位小数,并且设置输入边界
- Android testview editText 输入价格(0.00的格式)和件数(没有小数)的监听器