development

버튼 누름시 가상 키보드 닫기

big-blog 2020. 7. 2. 07:14
반응형

버튼 누름시 가상 키보드 닫기


나는이 ActivityEditText, 버튼과를 ListView. 목적은에 검색 화면을 입력 EditText하고 버튼을 누르고 검색 결과가이 목록을 채우도록하는 것입니다.

이것은 모두 완벽하게 작동하지만 가상 키보드는 이상하게 작동합니다.

를 클릭하면 EditText가상 키보드가 나타납니다. 가상 키보드에서 "완료"버튼을 클릭하면 사라집니다. 그러나 가상 키보드에서 "완료"를 클릭하기 전에 검색 버튼을 클릭하면 가상 키보드가 그대로 유지되어 제거 할 수 없습니다. "완료"버튼을 클릭해도 키보드가 닫히지 않습니다. "완료"단추를 "완료"에서 화살표로 변경하고 계속 표시합니다.

당신의 도움을 주셔서 감사합니다


InputMethodManager inputManager = (InputMethodManager)
                                  getSystemService(Context.INPUT_METHOD_SERVICE); 

inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                                     InputMethodManager.HIDE_NOT_ALWAYS);

나는 onClick(View v)이벤트 직후에 이것을 넣었다 .

가져와야합니다 android.view.inputmethod.InputMethodManager.

버튼을 클릭하면 키보드가 숨겨집니다.


mMyTextView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            // hide virtual keyboard
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(m_txtSearchText.getWindowToken(), 
                                      InputMethodManager.RESULT_UNCHANGED_SHOWN);
            return true;
        }
        return false;
    }
});

아래 코드 사용

your_button_id.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        try  {
            InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        } catch (Exception e) {

        }
    }
});

OnEditorActionListenerEditView를 구현해야 합니다.

public void performClickOnDone(EditView editView, final View button){
    textView.setOnEditorActionListener(new OnEditorActionListener() {

        @Override
        public boolean onEditorAction(EditView v, int actionId, KeyEvent event) {
            hideKeyboard();
            button.requestFocus();
            button.performClick();
            return true;
        }
    });

그리고 당신은 키보드를 숨 깁니다 :

public void hideKeybord(View view) {
    inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(),
                                  InputMethodManager.RESULT_UNCHANGED_SHOWN);
}

또한 버튼을 사용하여 키보드 숨기기를 실행해야합니다. onClickListener

이제 가상 키보드와 버튼에서 '완료'를 클릭하면 키보드가 숨겨지고 클릭 동작이 수행됩니다.


버튼 클릭 이벤트 안에 다음 코드를 추가하십시오.

InputMethodManager inputManager = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

편집 텍스트가 하나뿐이므로 버튼 클릭 내부에서 해당 편집 텍스트에 대해 수행 된 작업을 호출하기 만하면 나머지는 시스템에서 처리합니다. 하나 이상의 편집 텍스트가 있다면 초점을 맞춘 편집 텍스트를 먼저 가져와야하므로 그렇게 효율적이지 않습니다. 그러나 귀하의 경우에는 완벽하게 작동합니다

myedittext.onEditorAction(EditorInfo.IME_ACTION_DONE)

활동,

InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

단편의 경우 getActivity ()를 사용하십시오.

getActivity (). getSystemService ();

getActivity (). getCurrentFocus ();

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);

This solution works perfect for me:

private void showKeyboard(EditText editText) {
    editText.requestFocus();
    editText.setFocusableInTouchMode(true);
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(editText, InputMethodManager.RESULT_UNCHANGED_SHOWN);
    editText.setSelection(editText.getText().length());
}

private void closeKeyboard() {
    InputMethodManager inputManager = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);
}

Try this...

  1. For Showing keyboard

    editText.requestFocus();
    InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    
  2. For Hide keyboard

    InputMethodManager inputManager = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE); 
    inputManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
    

View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm =(InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);enter code here}

You use this code in your button click event

// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {  
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

Crash Null Point Exception Fix: I had a case where the keyboard might not open when the user clicks the button. You have to write an if statement to check that getCurrentFocus() isn't a null:

            InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if(getCurrentFocus() != null) {
            inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

Kotlin example:

val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

from Fragment:

inputMethodManager.hideSoftInputFromWindow(activity?.currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)

from Activity:

inputMethodManager.hideSoftInputFromWindow(currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)

If you set android:singleLine="true", automatically the button hides the keyboard¡

참고URL : https://stackoverflow.com/questions/3400028/close-virtual-keyboard-on-button-press

반응형