簡體   English   中英

我無法在Android上隱藏虛擬鍵盤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM