Android 实现点击空白处让EditText失去焦点并收起系统软键盘
时间: 2024-10-29 07:16:59 浏览: 62
在Android中,要实现用户点击屏幕空白区域时EditText失去焦点并隐藏系统软键盘,你需要监听全局的触摸事件。通常我们会将这个功能添加到Activity或Fragment的根View上。以下是一个简单的步骤:
1. 首先,在你的布局XML文件中设置一个全局的ViewGroup作为点击事件的目标,比如:
```xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true" >
<!-- 其他内容 -->
<EditText
android:id="@+id/edit_text"
... />
</LinearLayout>
```
这里添加`focusableInTouchMode="true"`是为了让EditText接收点击事件。
2. 在Activity或Fragment中获取该ViewGroup,并设置一个OnTouchListener:
```java
EditText editText = findViewById(R.id.edit_text);
View rootView = findViewById(android.R.id.content); // 获取整个Activity或Fragment的内容视图
rootView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN && !editText.hasFocus()) {
editText.clearFocus(); // 如果不是EditText获得焦点,则取消焦点
hideKeyboard(); // 调用隐藏键盘的方法
return true; // 消耗掉这次触摸事件,防止传递给其他控件
}
return false;
}
});
private void hideKeyboard() {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
if (imm != null && getCurrentFocus() != null) {
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
```
这个OnTouchListener会在用户触碰屏幕时检查是否点击了EditText之外的地方。如果不是,它会取消EditText的焦点并隐藏键盘。
阅读全文