[英]I can't hide the virtual keyboard on Android
我正在使用支持庫處理碎片並在片段中嵌套片段。
我有一個場景,我在現有片段中添加一個新片段(包含一個EditText)。 當用戶點擊EditText時,會顯示虛擬鍵盤。 但是當鍵盤打開時,用戶可以按下ActionBar中的主頁按鈕,從堆棧中刪除片段,但鍵盤仍然保持打開狀態。 我無法強行關閉鍵盤,我嘗試了所有代碼片段。 鑒於所描述的情景,任何人都可以指導我如何解決這個問題?
編輯:我做了一個回調函數,我從片段onDestroy調用。 承載所有片段的MainActivity實現此回調:
@Override
public void onHideSoftKeyboard(EditText editText) {
// HIDE SOFT KEYBOARD HERE
final InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
Toast.makeText(this,"KEYBOARD HIDDEN",Toast.LENGTH_LONG).show();
}
我收到Toast消息,並且在后退按鈕(ActionBar后退按鈕)上銷毀了片段,只有鍵盤仍然存在。
@Override
public void onDestroy() {
hideSoftKeyboard.onHideSoftKeyboard(editTextComment);
super.onDestroy();
}
嘗試用這個強制鍵盤:
InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
你也可以這樣:
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
如果要在用戶單擊“上一頁”按鈕時隱藏,請在onOptionsItemSelected方法中嘗試這樣:
case android.R.id.home:
// count the active fragment
if(getSupportFragmentManager().getStackBackEntryCount() > 0) {
// hide soft method as above
InputMethodManager mImm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
mImm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
// do the pop backstack
getSupportFragmentManager().popBackStack();
} else {
// some stuff like finish the activity
}
return true;
// other items...
使用(覆蓋)onBackPressed方法時,可以使用后退按鈕執行相同操作。
您可以使用以下代碼。
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
}
我用以下方法解決了這個問題。 首先,如果要在活動啟動時自動彈出鍵盤,請在onCreate方法中編寫以下代碼。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
然后,如果要關閉鍵盤,請使用以下命令。
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY,0);
我用下一個解決方案解決了這個問題
您需要從BaseFragment擴展每個Fragment,如下所示:
public class BaseFragment extends Fragment {
@Override
public void onDestroyView() {
hideKeyboard(getView());
super.onDestroyView();
}
public void hideKeyboard(View view) {
if(view != null) {
InputMethodManager imm = (InputMethodManager) getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
}
並且在關閉時要隱藏鍵盤的所有片段必須擴展BaseFragment:
public class EditTextFragment extends BaseFragment {
...
}
作為每個擴展片段的獎勵,您可以使用hideKeyboard(View view)
方法在片段中的任何位置隱藏鍵盤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.