편집 텍스트에 초점을 맞출 때 소프트 키보드를 표시하는 방법


461

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

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

  2. 키보드에서 완료를 클릭하면 키보드가 닫히지 만 EditText초점 이 유지되고 원하지 않습니다 (편집이 완료되었으므로).

다시 시작하기 위해 내 문제는 iPhone에서 더 많은 EditText것을 얻는 것입니다.


<EditText android : id = "@ + id / myEditText"android : layout_width = "fill_parent"android : layout_height = "wrap_content"android : imeOptions = "actionDone"/>과 같은 기본 EditText가 있습니다. this : EditText editTxt = (EditText) findViewById (R.id.myEditText); editTxt.requestFocus ();
— Ludovic Landry

2
이것은이 게시물의 어떤 대답보다 나에게 도움이되었습니다 : stackoverflow.com/a/2418314/1491212
— Armel Larcier

답변:


628

소프트 키보드를 강제로 표시하려면

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);
}

2
이 작업을 수행하면 활동이 나타날 때 소프트 키보드가 표시되지만 (좋아요) 포커스가 EditText를 떠나 버튼으로 이동하면 키보드가 그대로 유지됩니다 (나쁜 것입니다).
— Ludovic Landry

157
이미 포커스가있는 대화 상자의 EditText에서 작동하지 않습니다. 이유가 확실하지 않습니다.
— Matthias

10
@AbdellahBenhammou, 소프트 입력을 표시하기 전에 편집 텍스트에서 requestFocus 호출을 수행하면 문제가 해결 될 수 있습니다. 그것은 나를 위해했다.
— r1k0

18
@AbdellahBenhammou, DialogFragment의 onCreate ()에서이 작업을 수행하십시오. getDialog (). getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
— Phillip

22
yourEditText.requestFocus()여기에 설명 된대로 함께 작동 했습니다 : stackoverflow.com/questions/8991522/…
— 비벡 펜디

231

나는 같은 문제가 있었다. 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 (에뮬레이터)에서 테스트했습니다.

이 접근 방식은 나에게 많은 고통을 덜어 주었다.


48
나는 무언가가 너무 추악하고 너무 아름 다울 수 있다는 것을 몰랐습니다. 정말 고맙습니다!
— mkerley

15
@jellyfish 이것은의 탭을 시뮬레이션합니다 EditText. 이것을 읽는 다른 사람들을 위해, 새로 작성하는 대신 위젯 자체 Handler에서 View.postDelayed()메소드를 사용할 수도 있습니다 yourEditText.
— Tony Chan

5
이것은 David Chandler의 해킹입니다.
— 벤 베드 슨

4
David Chandler의 솔루션이 모든 Android 버전 / 장치에서 작동하고 VISIBILITY가 GONE에서 VISIBLE로 변경된 경우에는 YES입니다. 대신 그의 솔루션을 사용해야합니다.
— Mike Keskinov 2019

3
동의했다. 모든 Android 버전에서 작동하는 더 나은 솔루션을 알고 있습니까?
— Mike Keskinov

162

키보드가 나타나게하려면

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

이 메소드는 InputMethodManager를 직접 호출하는 것보다 더 안정적입니다.

닫으려면

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

12
누군가 직접 호출하는 것보다 왜 이것이 더 신뢰할 수 있는지 설명해 줄 수 있습니까 InputMethodManager? (하나의 경우 raukodraug의 솔루션과 달리 작동하지 않습니다.)
— Matthew Quiros

5
나에게도 효과가 없다. 안드로이드 2.3.5에서 작업. raukodraug의 솔루션이 저에게 효과적입니다. 버전 종속성을 검색했지만 찾을 수 없습니다.
— Hugo Logmans

2
이것은 Android 4.4.2에서 나를 위해 일했습니다. 이 게시물의 솔루션으로 선택된 InputMethodManager 메서드가 작동하지 않았습니다.
— Phil

답변에서 메소드를 사용한 후 이것을 추가하고 작동했지만 작동하지 않았습니다. 고맙습니다
— Manny265

2
Android 4.4.2에서 작동하지 않았습니다. 키보드를 표시하지만 숨기지 않았습니다.
— John J Smith

87

아무것도 작동하지 않으면 강제로 표시하십시오 .

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);

4
당신은 맞습니다, @Bolling! 아무것도 작동하지 않으면 코드가 저를 구했습니다. 감사!
— Willian Paixao

3
귀하의 코드는 나를 위해 일한 유일한 코드 이며이 페이지의 모든 솔루션을 시도했습니다! 고마워요!
— Mattia Ruggiero

4
강요하지 마십시오. 경우에 따라 포 그라운드에서 백그라운드로 이동할 때 키보드는 강제로 실행되기 때문에 키보드가 그대로 유지됩니다. 파편화 문제이지만 삼성 듀오에서 보았습니다.
— j2emanue

키보드를 강제로 닫지 않아도 키보드가 멈추는 것을 보았으므로 항상 키보드 onPause ()를 닫는 코드가 항상 있습니다.
— 볼링

그것은 효과가 있었지만 다른 화면으로 이동할 때 여전히 열려 있습니다
— Sithu

75

다음 코드는 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);
    }
});

감사! 놀랍도록 잘 작동합니다. 그리고이 문제에 대해 읽은 모든 답변과 주제에서 내가 더 편한 솔루션입니다.
— Rui

37
:-D setImeVisibility(hasFocus)?
— 마티아스

실제로 "내 자신의 검색보기를 롤링"했기 때문에이 방법을 시도했습니다 (필요하지는 않았지만 이유가 있음). 이것은 활동 시작을 제외하고는 나를 위해 일했습니다. 활동에 android : windowSoftInputMode = "alwaysVisible"을 추가했으며 이미 편집 텍스트에서 requestFocus ()가 호출되었습니다. 챔피언처럼 작동합니다.
— javahead76

removeCallbacks (mShowImeRunnable) 필요하십니까? 실행 파일을 대기열에서 실행하도록 선택하면 대기열에서도 동시에 제거 될 것이라고 생각 했습니까?
— Cheok Yan Cheng

1
여러 변형을 시도한 후에 이것은 나에게 일관되게 작동하는 유일한 방법이었습니다 (Android 4.42). Thx
— John J Smith

34

android:windowSoftInputMode="stateAlwaysVisible" 매니페스트 파일에서->

edittext.requestFocus(); 코드에서->.

활동이 나타날 때 편집 텍스트에 포커스를 요청하는 소프트 키보드가 열립니다.


2
액티비티 생성시 키보드가 열립니다.
— xpto

질문에 대답하지 않지만 나를 도와주었습니다 :)
— S.Thiongane

api 22에서 requestfocus없이 키를 엽니 다
— David

내 경우에는 잘 작동합니다. XML에서 요청 포커스 속성이 왜 언급되어야하는지 궁금 manifest합니다.
— sud007

30

아래 코드를 사용하여 간단한 경우에 최근 운이 좋았습니다. 모든 테스트를 완료하지는 못했지만 ...

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));

키보드가 표시됩니다.


제 경우에는 옵션 정보를 추가 할 수있는 버튼이있었습니다. button.onClick 핸들러에는 위의 코드가 추가되어 선택적 정보를 입력 할 때 소프트 키보드가 나타나도록합니다. 이드 2.2.2
— 덴트

이것은 좋은 솔루션이지만 사용 후 MotionEvent 객체를 만들고 recycle ()을 호출하여 나중에 호출자가 다시 사용하는 것을 잊지 마십시오.
— jimbob

인수로 ACTION_UP을 사용하는 dispatchTouchEvent ()가 하나만 필요합니다.
— Mohammed Junaid

15

소프트 키보드가 나타나도록 강요 할 수 있습니다.

...
dialog.show();
input.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

1
이것은 나를 위해 작동합니다 ... 나는이 InputMethodManager를 시도했다 imm = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE); imm.showSoftInput (이름, inputMethodManager.SHOW_IMPLICIT); 또는 getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 그러나 그들 중 누구도 일하지 않았습니다.
— Günay Gültekin

10

때로는 raukodraug의 답변이 작동하지 않습니다. 몇 가지 시행 착오로 이런 식으로 만들었습니다.

public static void showKeyboard(Activity activity) {
    if (activity != null) {
        activity.getWindow()
                .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }
}

public static void hideKeyboard(Activity activity) {
    if (activity != null) {
        activity.getWindow()
                .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    }
}

그리고 EditText 부분 :

    editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                hideKeyboard(getActivity());
            } else {
                showKeyboard(getActivity());
            }
        }
    });

1
이 5 안드로이드에 나를 위해 일한 유일한 솔루션입니다
— user1021430

10

키보드를 숨기려면 다음 중 하나를 사용하십시오.

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

키보드를 표시하려면

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

DialogFragment의 경우이를 재정의 된 것으로 호출 onStart()할 수 getDialog().getWindow()있으며의 대안으로 사용할 수 있습니다 getActivity().getWindow().
— Mr-IDE

10

Kotlin의 경우 다음 확장을 사용하십시오.

fun EditText.showKeyboard() {
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}

fun EditText.hideKeyboard() {
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(this.windowToken, 0)
}

내가 찾던 것.
— lasec0203

8

조각의 경우 작동하는지 확인하십시오.

 displayName = (EditText) view.findViewById(R.id.displayName);
    InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

7

showSoftInput 나를 위해 전혀 작동하지 않았습니다.

입력 모드를 설정해야한다고 생각했습니다. (매니페스트의 Activity 구성 요소)

android:windowSoftInputMode="stateVisible" 

6

액티비티 애니메이션이 소프트 키보드를 비활성화 할 수 있음을 발견했을 때 소프트 키보드에 대한 내 문제를 믿거 나 말거나 해결했습니다. 당신이 의도를 호출하면

i.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

과

overridePendingTransition(0, 0);

소프트 키보드를 숨길 수 있으며 표시 할 방법이 없습니다.


6

나는 다양한 상황에서 같은 문제가 있었고, 내가 찾은 솔루션은 일부에서는 작동하지만 다른 곳에서는 작동하지 않으므로 찾은 대부분의 상황에서 작동하는 결합 솔루션이 있습니다.

public static void showVirtualKeyboard(Context context, final View view) {
    if (context != null) {
        final InputMethodManager imm =  (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        view.clearFocus();

        if(view.isShown()) {
            imm.showSoftInput(view, 0);
            view.requestFocus();
        } else {
            view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
                @Override
                public void onViewAttachedToWindow(View v) {
                    view.post(new Runnable() {
                        @Override
                        public void run() {
                            view.requestFocus();
                            imm.showSoftInput(view, 0);
                        }
                    });

                    view.removeOnAttachStateChangeListener(this);
                }

                @Override
                public void onViewDetachedFromWindow(View v) {
                    view.removeOnAttachStateChangeListener(this);
                }
            });
        }
    }
}

6
editText.post(new Runnable() {
    @Override
    public void run() {
        InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
    }
});

6

나는 여기에 모든 것을 결합했고 나를 위해 작동합니다.

public static void showKeyboardWithFocus(View v, Activity a) {
    try {
        v.requestFocus();
        InputMethodManager imm = (InputMethodManager) a.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
        a.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

6

그것은 나를 위해 일했다. 키보드를 표시하기 위해 이것을 시도해 볼 수도 있습니다.

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

5

코드 스 니펫. . .

public void hideKeyboard(Context activityContext){

    InputMethodManager imm = (InputMethodManager)
            activityContext.getSystemService(Context.INPUT_METHOD_SERVICE);

    //android.R.id.content ( http://stackoverflow.com/a/12887919/2077479 )
    View rootView = ((Activity) activityContext)
            .findViewById(android.R.id.content).getRootView();

    imm.hideSoftInputFromWindow(rootView.getWindowToken(), 0);
}

public void showKeyboard(Context activityContext, final EditText editText){

    final InputMethodManager imm = (InputMethodManager)
            activityContext.getSystemService(Context.INPUT_METHOD_SERVICE);

    if (!editText.hasFocus()) {
        editText.requestFocus();
    }

    editText.post(new Runnable() {
        @Override
        public void run() {
            imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
        }
    });
}

5

Kotlin 키보드를 포커스에 표시하기위한 확장.

이것은 너무 길거나 불완전한 이전 응답의 조합입니다.

이 확장 기능은 메시지 큐에 실행 파일을 게시하여 포커스를 요청한 후 소프트 키보드를 표시합니다.

fun View.showSoftKeyboard() {
    post {
        if (this.requestFocus()) {
            val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            imm?.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
        }
    }
}

나중에 필요할 때 모든보기에서 호출하십시오.

editText.showSoftKeyboard()


4
final InputMethodManager keyboard = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

4

매니페스트 내부 :

android:windowSoftInputMode="stateAlwaysVisible"-처음에 키보드를 시작했습니다. android:windowSoftInputMode="stateAlwaysHidden" -처음에는 숨겨진 키보드.

"adjustPan"키보드가 시작되면 화면이 자동으로 조정되기 때문에 사용하고 싶습니다 .

 <activity
      android:name="YourActivity"
      android:windowSoftInputMode="stateAlwaysHidden|adjustPan"/>

4

EditText보기에이 줄을 추가하면됩니다.

android:isScrollContainer="true"

그리고 TADA-키보드가 자동으로 나타나기 시작했습니다!

나는 비슷한 문제가 있었고이 간단하고 이상한 해결책을 발견했습니다.

user3392439에 의해 이미 언급 된 바와 같이, 포커스에 따른 키보드의 출현은 XML 파일의 스크롤 구성 요소의 존재와 어렴풋이 연결되어있다.

심지어 존재 다른 같은 XML에 언급 된 라인을 포함 글고보기는 키보드 EditTexts 중 하나가 현재 집중 상관없이 나타날 수 있습니다.

XML 파일에 스크롤 구성 요소를 포함하는 하나 이상의 가시적 뷰 가있는 경우 키보드가 초점에 자동으로 나타납니다.

스크롤이 없으면 키보드가 나타나도록 EditText를 클릭해야합니다.


이것은 매우 이상하다하지만 확실히 작동 - I가 시도하는 requesFocus()클릭 핸들러 내에서이 명시 적 showSoftInput SHOW_FORCED보다 유일한 방법은 다른 것입니다
— 그린

고마워, 고마워 왜 작동하는지 전혀 알지 못하지만 다른 제조업체의 8 개 장치에서 테스트했으며 매번 작동했습니다!
— 안토니오 블라 시크

3

위에 주어진 모든 솔루션 ( OnFocusChangeListener.OnFocusChange 리스너의 InputMethodManager 상호 작용은 EditText에 첨부 됨 은 활동에서 단일 편집이 있으면 잘 작동합니다.

제 경우에는 두 가지 편집이 있습니다.

 private EditText tvX, tvY;
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 tvX.setOnFocusChangeListener(this);
    tvY.setOnFocusChangeListener(this);

@Override
public void onFocusChange(View v, boolean hasFocus) {       
    InputMethodManager imm =  (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if(tvX.hasFocus() || tvY.hasFocus()) {            
        imm.showSoftInput(v, 0);            
    } else {
        imm.hideSoftInputFromWindow(v.getWindowToken(), 0);         
    }       
};

onFocusChange가 hasFocus = true (키보드 표시)가있는 tvX에 대해 트리거 된 다음 hasFocus = true (키보드 숨김)가있는 tvY에 대해 트리거되는 것으로 나타났습니다. 결국 키보드가 보이지 않았습니다.

"EditText 텍스트에 포커스가있는 경우 키보드 표시"


3

활동의 onResume () 섹션에서 bringKeyboard () 메소드를 호출 할 수 있습니다.

 onResume() {
     EditText yourEditText= (EditText) findViewById(R.id.yourEditText);
     bringKeyboard(yourEditText);
 }


  protected boolean bringKeyboard(EditText view) {
    if (view == null) {
        return false;
    }
    try {
      // Depending if edittext has some pre-filled values you can decide whether to bring up soft keyboard or not
        String value = view.getText().toString();
        if (value == null) {
            InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            return true;
        }
    } catch (Exception e) {
        Log.e(TAG, "decideFocus. Exception", e);
    }
    return false;
  }

무엇입니까 WidgetUtils.showKeyboard? 이것이 가장 중요한 부분입니다.
— TWiStErRob

2

대답 중 어느 것도 나를 위해 일하지 않았습니다. 간단한 방법이 있습니다.

searchEditText.setVisibility(View.VISIBLE);
                final Handler handler=new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        searchEditText.requestFocus();
                    }
                }, 400);

400ms 동안 requestFocus () 메소드를 지연 시켰습니다.


많은 감사합니다, 그것은 ... 키보드를 보여주는 일부 지연을 필요
— hkh114

1

내 앱 중 하나에서 소프트 키보드가 자동으로 활동을 입력 할 때 (onCreate에 editText.requestFocus ()가 있음) 이상한 동작을 발견했습니다.

더 자세히 살펴보면 레이아웃 주위에 ScrollView가 있기 때문이라는 것을 알았습니다. ScrollView를 제거하면 원래 문제 설명에 설명 된대로 동작이 나타납니다. 이미 포커스가있는 editText를 클릭 할 때만 소프트 키보드가 나타납니다.

그것이 효과가 없다면 ScrollView를 넣어보십시오. 어쨌든 무해합니다.


1

나는 한 보기 애니메이션을 사용하여 비슷한 문제 . 따라서 표시된 편집 텍스트에서 키보드 액세스를 요청하기 전에 애니메이션이 끝나기 를 기다릴 수 있도록 애니메이션 리스너를 배치했습니다.

    bottomUp.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            if (textToFocus != null) {
                // Position cursor at the end of the text
                textToFocus.setSelection(textToFocus.getText().length());
                // Show keyboard
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(textToFocus, InputMethodManager.SHOW_IMPLICIT);
            }
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }
    });

1

나는 raukodraug에 동의하며 swithview에서 다음과 같이 초점을 요청 / 취소해야합니다.

    final ViewSwitcher viewSwitcher = (ViewSwitcher) findViewById(R.id.viewSwitcher);
    final View btn = viewSwitcher.findViewById(R.id.address_btn);
    final View title = viewSwitcher.findViewById(R.id.address_value);

    title.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            viewSwitcher.showPrevious();
            btn.requestFocus();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(btn, InputMethodManager.SHOW_IMPLICIT);
        }
    });

    // EditText affiche le titre evenement click
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            btn.clearFocus();
            viewSwitcher.showNext();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(btn.getWindowToken(), 0);
            // Enregistre l'adresse.
            addAddress(view);
        }
    });

문안 인사.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.