下面这段程序主要为了实现以下三个功能:
一、同步监听文本输入框的变化,默认继承以下三个方法,分别监听文本改变前、中、后;
二、同时用正则表达式判断输入的电话号码是否合法;
三、最后在activity展示一秒后,跳出软键盘;
import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
public class LoginCheckActivity extends Activity
{
private Button checkNextButton = null;
private Button checkCancelButton = null;
private EditText phoneEditText = null;
private TextWatcher phoneTextWatcher;
private String phoneNumber = null;
private InputMethodManager imm;
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.login_check);
initView();
}
private void initView()
{
// TODO Auto-generated method stub
checkNextButton = (Button) findViewById(R.id.button_check_next);
checkCancelButton = (Button) findViewById(R.id.button_check_cancel);
phoneEditText = (EditText) findViewById(R.id.login_check_edittext);
checkNextButton.setEnabled(false);//设置按钮为不可按
/**
* 监听输入的手机号码是否正确
*/
phoneTextWatcher = new TextWatcher()
{
@Override
public void afterTextChanged(Editable s)
{
// TODO Auto-generated method stub
}
@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
phoneNumber = phoneEditText.getText().toString();
if (isPhoneNumberValid(phoneNumber) == true)
{
checkNextButton.setEnabled(true);
Log.e("@@@", "ture");
}
else
{
checkNextButton.setEnabled(false);
Log.e("@@@", "false");
}
}
};
phoneEditText.addTextChangedListener(phoneTextWatcher);
}
/**
* 检查字符串是否为电话号码的方法,并返回true or false的判断值
*/
public static boolean isPhoneNumberValid(String phoneNumber)
{
boolean isValid = false;
/** 可接受的电话格式有:
* ^//(? : 可以使用 "(" 作为开头
* (//d{3}): 紧接着三个数字
* //)? : 可以使用")"接续
* [- ]? : 在上述格式后可以使用具选择性的 "-".
* (//d{3}) : 再紧接着三个数字
* [- ]? : 可以使用具选择性的 "-" 接续.
* (//d{5})$: 以五个数字结束.
* 可以比较下列数字格式:
* (123)456-7890, 123-456-7890, 1234567890, (123)-456-7890
*/
String expression = "^//(?(//d{3})//)?[- ]?(//d{3})[- ]?(//d{5})$";
/** 可接受的电话格式有:
* ^//(? : 可以使用 "(" 作为开头
* (//d{3}): 紧接着三个数字
* //)? : 可以使用")"接续
* [- ]? : 在上述格式后可以使用具选择性的 "-".
* (//d{4}) : 再紧接着四个数字
* [- ]? : 可以使用具选择性的 "-" 接续.
* (//d{4})$: 以四个数字结束.
* 可以比较下列数字格式:
* (02)3456-7890, 02-3456-7890, 0234567890, (02)-3456-7890
*/
String expression2 = "^//(?(//d{3})//)?[- ]?(//d{4})[- ]?(//d{4})$";
CharSequence inputStr = phoneNumber;
/*创建Pattern*/
Pattern pattern = Pattern.compile(expression);
/*将Pattern 以参数传入Matcher作Regular expression*/
Matcher matcher = pattern.matcher(inputStr);
/*创建Pattern2*/
Pattern pattern2 = Pattern.compile(expression2);
/*将Pattern2 以参数传入Matcher2作Regular expression*/
Matcher matcher2 = pattern2.matcher(inputStr);
if (matcher.matches())//|| matcher2.matches())
{
isValid = true;
}
return isValid;
}
@Override
protected void onResume()
{
// TODO Auto-generated method stub
super.onResume();
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run()
{
imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(phoneEditText, 0);
}
}, 1000);
}
}
还有一种更简洁地判断手机号码的方法,如下:
ok!