InputFilter 或 TextWatcher for EditText 处理大整数(如年份..)
InputFilter or TextWatcher for EditText which handle large integer(like year..)
我需要在我的应用程序中为 EditText 创建处理程序,这个 EditText 接受 1980 年到 2015 年之间的年份。
我在这个 link.
中找到了针对天数和月数的 EditText 的非常好的解决方案
但不幸的是,它不适用于像年这样的大数字!
所以我写了一段代码
etDateYear = (EditText) findViewById(R.id.year_date_xml);
etDateYear.addTextChangedListener(YearWatcher);
private final TextWatcher YearWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
try{
if(s.length()>=4){
int year = Integer.parseInt(etDateYear.getText().toString());
if(!(year < 2016 && year > 1979)) {
etDateYear.setText("");
}
}
} catch (NumberFormatException nfe) {
//nfe
}
}
};
这个也不行,因为任何一位数字都小于 1980,所以它通过“”。 (我认为这是原因)。
所以有人可以帮忙吗?非常感谢..
解决方案 1:我提到的最简单的解决方案是 -
if(s.length()>=4){
int year = Integer.parseInt(etDateYear.getText().toString());
if(year < 2015 && year > 1980 ) {
//do nothing input is proper
} else {
etDateYear.setText("");
}
}
或
if(s.length()>=4){
int year = Integer.parseInt(etDateYear.getText().toString());
if(!(year < 2015 && year > 1980)) {
etDateYear.setText("");
}
}
解决方案 2:使用多个 if
if(s.length()>=4){
int year = Integer.parseInt(etDateYear.getText().toString());
if(year>1980){
if(year<2015){
//proper input
} else {
etDateYear.setText("");
}
} else {
etDateYear.setText("");
}
}
我需要在我的应用程序中为 EditText 创建处理程序,这个 EditText 接受 1980 年到 2015 年之间的年份。
我在这个 link.
中找到了针对天数和月数的 EditText 的非常好的解决方案但不幸的是,它不适用于像年这样的大数字!
所以我写了一段代码
etDateYear = (EditText) findViewById(R.id.year_date_xml);
etDateYear.addTextChangedListener(YearWatcher);
private final TextWatcher YearWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
try{
if(s.length()>=4){
int year = Integer.parseInt(etDateYear.getText().toString());
if(!(year < 2016 && year > 1979)) {
etDateYear.setText("");
}
}
} catch (NumberFormatException nfe) {
//nfe
}
}
};
这个也不行,因为任何一位数字都小于 1980,所以它通过“”。 (我认为这是原因)。
所以有人可以帮忙吗?非常感谢..
解决方案 1:我提到的最简单的解决方案是 -
if(s.length()>=4){
int year = Integer.parseInt(etDateYear.getText().toString());
if(year < 2015 && year > 1980 ) {
//do nothing input is proper
} else {
etDateYear.setText("");
}
}
或
if(s.length()>=4){
int year = Integer.parseInt(etDateYear.getText().toString());
if(!(year < 2015 && year > 1980)) {
etDateYear.setText("");
}
}
解决方案 2:使用多个 if
if(s.length()>=4){
int year = Integer.parseInt(etDateYear.getText().toString());
if(year>1980){
if(year<2015){
//proper input
} else {
etDateYear.setText("");
}
} else {
etDateYear.setText("");
}
}