버튼 누름시 가상 키보드 닫기
나는이 Activity
와 EditText
, 버튼과를 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) {
}
}
});
OnEditorActionListener
EditView를 구현해야 합니다.
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...
For Showing keyboard
editText.requestFocus(); InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
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
'development' 카테고리의 다른 글
힘내 로그 날짜 형식을 변경하는 방법 (0) | 2020.07.02 |
---|---|
Mac에 pip3를 설치하는 방법은 무엇입니까? (0) | 2020.07.02 |
롤리팝 : 색상을 투명하게 설정하여 statusBar 뒤에 그리기 (0) | 2020.07.02 |
스크립트 끝에서 R 신호음을 울리거나 재생하는 방법이 있습니까? (0) | 2020.07.02 |
루비에서 긴 반복 텍스트 문자열을 어떻게 생성합니까? (0) | 2020.07.01 |