EditText之输入
一、设定输入字符
1、 设定输入内容
例如:在xml中,Android:inputType="textPassword"
java中,myEditText.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
或者使用 android:digits="0123456789"
再例如 editText.setInputType(InputType.TYPE_CLASS_NUMBER);//调用数字键盘
editText.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);//英文
这类文章太多了诸多博客中大神“ 維智 ”的相对更详细Android之设置EditText输入类型(setInputType()方法和android:inputType属性)感兴趣的可以看看
① 设定输入字符类型
这类文章也很多,推荐一篇大牛“一点点征服”的EditText限制输入字符类型的几种方式
② 设定是否可编辑
android:editable="true"//可编辑
android:focusable="false"//不弹出软键盘
(1)EditTex有焦点(focusable为true)阻止输入法弹出
editText.setOnTouchListener(newOnTouchListener(){
public boolean onTouch(View view,MotionEvent event){
editText.setInputType(Input.TYPE_NULL);//关闭软键盘
return false;
}
});
(2)EditText无焦点(focusable=false)时阻挡输入法弹出
InputMethodManagerimm=(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(),0);
③ 最简单的位数设定
XML中android:maxLength="16"
在代码中控制editText.setFilters(newInputFilter[]{newInputFilter.LengthFilter(16)});
2、限定输入6个字符,无论数字、字母还是汉字
有时需要限定输入汉字个数怎么办,如下所示:
二、设定输入手机号位数中间加空格
提供两种手机号加空格的方式:
① 利用大神Angel_jn编写的一个自定义editText
原文链接为Android开发---手机号码输入框(满11位自动跳到下个输入框)
② 添加事件监听addTextChangedListener()
//手机号11位中间有空格--方法1
etPhone1.addTextChangedListener(new TextMobileListener());
class TextMobileListener implements TextWatcher {
@Override
public void beforeTextChanged(CharSequences, int start, int count, int after){
}// 设定获取焦点时,清空提示语
etPhone1.requestFocus();
@Override
public void onTextChanged(CharSequences, int start, int before, int count){
int length = s.toString().length();
//删除数字
if (count== 0){
if (length == 4){
etPhone1.setText(s.subSequence(0, 3));
}
if (length == 9){
etPhone1.setText(s.subSequence(0, 8));
}
}
//添加数字
if (count== 1){
if (length == 4){
String part1 = s.subSequence(0, 3).toString();
String part2 = s.subSequence(3, length).toString();
etPhone1.setText(part1 + " " + part2);
}
if (length== 9){
String part1 = s.subSequence(0, 8).toString();
String part2 = s.subSequence(8, length).toString();
etPhone1.setText(part1 + " " + part2);
}
}
}
@Override
public void afterTextChanged(Editables) {
//将光标移动到末尾
etPhone1.setSelection(etPhone1.getText().toString().length());
//处理s
if (s!= null &&s.length()== 13){
if (etPhone1.isFocused()) {
etPhone1.clearFocus();
// 设定获取焦点时,
etPhone2.requestFocus();
} } }}
三、设定输入的是数字加小数点
还是紧跟大神"fshsoft的CSDN博客“的步伐Android基础--EditText输入框限制小数的位数解决方法
四、设定某editText获取焦点是弹出软键盘,并清空提示语
① 清空提示语:
etPhone1.setOnFocusChangeListener(onFocusAutoClearHintListener);
// 设置某edittext获取焦点时,清空提示语
public View.OnFocusChangeListener onFocusAutoClearHintListener = new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
EditText textView = (EditText) v;
String hint;
if (hasFocus) {
hint = textView.getHint().toString();
textView.setTag(hint);
textView.setHint("");
} else {
hint = textView.getTag().toString();
textView.setHint(hint);
};
② 弹出软键盘
(1)最简单的弹出:
// 显示软键盘private void showSoftInputMethodManager(EditText mSearchEt){InputMethodManager inputManager = (InputMethodManager)mSearchEt.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);inputManager.showSoftInput(mSearchEt, 0);}
(2) 延时弹出:
editable_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showKeyboard();
}
});
// 弹出软键盘
public void showKeyboard() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Message msg = new Message();
msg.what = 4;
mHandler.sendMessage(msg);
}
}, 200);
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 4:
if(etPhone2!=null){
//清空editText提示语
etPhone2.setOnFocusChangeListener(LoginActivity.onFocusAutoClearHintListener);
//设置可获得焦点
etPhone2.setFocusable(true);
etPhone2.setFocusableInTouchMode(true);
//请求获得焦点
etPhone2.requestFocus();
// 设置光标移动到最后一位
etPhone2.setSelection(etPhone2.getText().toString().length());
//调用系统输入法
InputMethodManager inputManager = (InputMethodManager) etPhone2.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(etPhone2, 0);
}
break;
default:
break;
}
}
};