您的位置:首页 > 移动开发 > Android开发

关于键盘隐藏的问题

2015-11-22 16:24 375 查看
点击其他位置时 , 软键盘消失

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (isShouldHideInput(v, ev)) {

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
return super.dispatchTouchEvent(ev);
}
// 必不可少,否则所有的组件都不会有TouchEvent了
if (getWindow().superDispatchTouchEvent(ev)) {
return true;
}
return onTouchEvent(ev);
}
/** 判断是否需要隐藏键盘 */
public boolean isShouldHideInput(View v, MotionEvent event) {
if (v != null && (v instanceof EditText)) {
int[] leftTop = { 0, 0 };
// 获取输入框当前的location位置
v.getLocationInWindow(leftTop);
int left = leftTop[0];
int top = leftTop[1];
int bottom = top + v.getHeight();
int right = left + v.getWidth();
if (event.getX() > left && event.getX() < right
&& event.getY() > top && event.getY() < bottom) {
// 点击的是输入框区域,保留点击EditText的事件
return false;
} else {
return true;
}
}
return false;
}


几个属性的介绍

android:gravity=”top”

这个属性为top可以将光标置于左上角(当EditText设为全屏时)

android:background=”@null”

这个属性为null可以将输入的框线去掉

android:textCursorDrawable=”@drawable/ic_launcher”

这个属性可以设置光标为drawable样式(可以为一张图片)

android:editable=”false” 

这个属性为false,则EditText不可编辑。注意是仅仅不能进行输入,但是EditText的滚动什么的还是可以响应的。

android:enabled=”false”

这个属性为false,则EditText也是不可编辑。注意不仅不可编辑,连滚动什么的都不可以响应,所以可以说是直接让EditText不可用。

android:cursorVisible=”false“

这个属性为false,则EditText的光标不可见。

android:focusableInTouchMode=”false”

这个是属性为false ,则EditText 不相依触摸模式的焦点 , 或者说触摸事件不可用 .

3.

监听EditText的输入

可以使用TextWatcher来监听EditText的输入。使用方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
Et.addTextChangedListener(new TextWatcher() {
//S:变化后的所有字符;start:字符起始的位置;before: 变化之前的总字节数;count:变化后的字节数
public void onTextChanged(CharSequence s, int start, int before, int count) {

}
      //s:变化前的所有字符; start:字符开始的位置; count:变化前的总字节数;after:变化后的字节数
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
      //s:变化后的所有字符
public void afterTextChanged(Editable s) {
}
});


不自动弹出输入法的键盘

(1)方法一

经过测验,如果EditText和TextView在一起的话,那么输入法就不会自动弹出。这是由于TextView本身的特性导致的。顺便说一句,EditText本身就是继承自TextView的。

因此,你可以放一个TextView到你的布局中,来防止自动弹出输入法。

(2)方法二

还可以利用代码动态设定不弹出输入法。只需要在合适的地方,写下下面的代码即可。下面的代码就是让EditText默认不显示软键盘,只有当被点击的时候才会显示出软键盘

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE |
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);


设置EditText显示样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
android:inputType参数类型说明
android:inputType="none"--输入普通字符
android:inputType="text"--输入普通字符
android:inputType="textCapCharacters"--输入普通字符
android:inputType="textCapWords"--单词首字母大小
android:inputType="textCapSentences"--仅第一个字母大小
android:inputType="textAutoCorrect"--前两个自动完成
android:inputType="textAutoComplete"--前两个自动完成
android:inputType="textMultiLine"--多行输入
android:inputType="textImeMultiLine"--输入法多行(不一定支持)
android:inputType="textNoSuggestions"--不提示
android:inputType="textUri"--URI格式
android:inputType="textEmailAddress"--电子邮件地址格式
android:inputType="textEmailSubject"--邮件主题格式
android:inputType="textShortMessage"--短消息格式
android:inputType="textLongMessage"--长消息格式
android:inputType="textPersonName"--人名格式
android:inputType="textPostalAddress"--邮政格式
android:inputType="textPassword"--密码格式
android:inputType="textVisiblePassword"--密码可见格式
android:inputType="textWebEditText"--作为网页表单的文本格式
android:inputType="textFilter"--文本筛选格式
android:inputType="textPhonetic"--拼音输入格式
android:inputType="number"--数字格式
android:inputType="numberSigned"--有符号数字格式
android:inputType="numberDecimal"--可以带小数点的浮点格式
android:inputType="phone"--拨号键盘
android:inputType="datetime"
android:inputType="date"--日期键盘
android:inputType="time"--时间键盘
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  EditText Android