태그 보관물: focus

focus

편집 텍스트에 초점을 맞출 때 소프트 키보드를 표시하는 방법 때 (기기에 물리적 키보드가없는

EditText초점이 맞았을 때 (기기에 물리적 키보드가없는 경우) 소프트 키보드를 자동으로 표시 하고 싶은데 두 가지 문제가 있습니다.

  1. 내가 Activity표시되면 EditText초점이 맞았지만 키보드가 표시되지 않는 경우 키보드를 다시 표시하려면 키보드를 다시 클릭해야합니다 (내가 표시되면 표시되어야 함 Activity).

  2. 키보드에서 완료를 클릭하면 키보드가 닫히지 만 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));

키보드가 표시됩니다.