在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點擊其他區域收起軟鍵盤的功能。這一方案可以避免用戶誤觸,提升應用體驗。
原創文章,作者:CNAZG,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/374508.html
微信掃一掃
支付寶掃一掃