在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-hk/n/374508.html