에 EditText
초점이 맞았을 때 (기기에 물리적 키보드가없는 경우) 소프트 키보드를 자동으로 표시 하고 싶은데 두 가지 문제가 있습니다.
-
내가
Activity
표시되면EditText
초점이 맞았지만 키보드가 표시되지 않는 경우 키보드를 다시 표시하려면 키보드를 다시 클릭해야합니다 (내가 표시되면 표시되어야 함Activity
). -
키보드에서 완료를 클릭하면 키보드가 닫히지 만
EditText
초점 이 유지되고 원하지 않습니다 (편집이 완료되었으므로).
다시 시작하기 위해 내 문제는 iPhone에서 더 많은 EditText
것을 얻는 것입니다.
답변
소프트 키보드를 강제로 표시하려면
EditText yourEditText= (EditText) findViewById(R.id.yourEditText);
yourEditText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
에 대한 초점을 제거하려면 EditText
슬프게도 View
초점을 잡을 더미가 필요합니다 .
이게 도움이 되길 바란다
그것을 닫으려면 사용할 수 있습니다
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0);
이것은 대화 상자에서 사용하기 위해 작동합니다
public void showKeyboard(){
InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
public void closeKeyboard(){
InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
}
답변
나는 같은 문제가 있었다. editText VISIBILITY가 GONE에서 VISIBLE로 변경 되 자마자 포커스를 설정하고 소프트 키보드를 표시해야했습니다. 다음 코드를 사용하여 이것을 달성했습니다.
new Handler().postDelayed(new Runnable() {
public void run() {
// ((EditText) findViewById(R.id.et_find)).requestFocus();
//
EditText yourEditText= (EditText) findViewById(R.id.et_find);
// InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
}
}, 200);
100ms 지연으로 작동하지만 지연없이 또는 1ms 지연으로 실패했습니다.
주석 처리 된 코드 부분은 일부 장치에서만 작동하는 다른 접근 방식을 보여줍니다. OS 버전 2.2 (에뮬레이터), 2.2.1 (실제 장치) 및 1.6 (에뮬레이터)에서 테스트했습니다.
이 접근 방식은 나에게 많은 고통을 덜어 주었다.
답변
키보드가 나타나게하려면
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
이 메소드는 InputMethodManager를 직접 호출하는 것보다 더 안정적입니다.
닫으려면
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
답변
아무것도 작동하지 않으면 강제로 표시하십시오 .
editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
그런 다음 나중에 닫으려면 예를 들어 onPause ()에서 다음을 호출 할 수 있습니다.
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
답변
다음 코드는 Google 4.1의 SearchView 소스 코드에서 추출 된 것입니다. 더 적은 버전의 Android에서도 잘 작동하는 것 같습니다.
private Runnable mShowImeRunnable = new Runnable() {
public void run() {
InputMethodManager imm = (InputMethodManager) getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.showSoftInput(editText, 0);
}
}
};
private void setImeVisibility(final boolean visible) {
if (visible) {
post(mShowImeRunnable);
} else {
removeCallbacks(mShowImeRunnable);
InputMethodManager imm = (InputMethodManager) getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(getWindowToken(), 0);
}
}
}
또한 제어 / 활동이 생성 될 때 다음 코드를 추가해야합니다. (제 경우에는 활동이 아닌 복합 컨트롤입니다).
this.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
setImeVisibility(hasFocus);
}
});
답변
android:windowSoftInputMode="stateAlwaysVisible"
매니페스트 파일에서->
edittext.requestFocus();
코드에서->.
활동이 나타날 때 편집 텍스트에 포커스를 요청하는 소프트 키보드가 열립니다.
답변
아래 코드를 사용하여 간단한 경우에 최근 운이 좋았습니다. 모든 테스트를 완료하지는 못했지만 …
EditText input = (EditText) findViewById(R.id.Input);
input.requestFocus();
input.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
input.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
키보드가 표시됩니다.