在Android应用中,当输入框获取焦点弹出软键盘后,我们希望能够点击其他区域使软键盘消失,以提升用户体验。本篇文章将说明如何实现这一功能。
一、获取焦点并显示软键盘
在Android中,当EditText等控件获取焦点后,系统会自动弹出软键盘。我们可以通过如下代码获取控件焦点并弹出软键盘:
editText.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
二、点击其他区域收起软键盘
要实现点击其他区域收起软键盘,我们需要在布局文件中添加一个可点击的空间,例如一个普通的View:
<RelativeLayout android:id="@+id/layout_main" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入内容"/> <View android:id="@+id/view" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000000" android:alpha="0.5"/> </RelativeLayout>
然后在Activity中为View添加点击事件:
View view = findViewById(R.id.view); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); view.setVisibility(View.GONE); } });
其中,我们使用InputMethodManager的hideSoftInputFromWindow()方法来收起软键盘,使用setVisibility()方法将View隐藏。
三、优化收起软键盘触发事件
在上述代码中,View的点击事件是在用户点击屏幕时触发的,这可能会存在误触的情况。我们可以通过在Activity中重写onTouchEvent()方法,判断触摸点是否在EditText之外,来优化软键盘收起触发事件:
@Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { View v = getCurrentFocus(); if (v instanceof EditText) { Rect outRect = new Rect(); v.getGlobalVisibleRect(outRect); if (!outRect.contains((int) event.getRawX(), (int) event.getRawY())) { v.clearFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); view.setVisibility(View.GONE); } } } return super.onTouchEvent(event); }
通过获取当前焦点的View,判断触摸点是否在EditText之外,来触发软键盘收起操作。
四、总结
通过在布局文件中添加一个可点击的View,并为其添加点击事件,在Activity中判断触摸点是否在EditText之外,来实现Android点击其他区域收起软键盘的功能。这一方案可以避免用户误触,提升应用体验。