[android] 프로그래밍 방식으로 소프트 키보드 열기

하위 위젯이없는 활동이 있으며 해당 xml 파일은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myLayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusable="true"
>
</LinearLayout>

활동이 시작되는 동안 프로그래밍 방식으로 소프트 키보드를 열고 싶습니다. 지금까지 시도한 것은

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if (inputMethodManager != null) {
        inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    }

지침을 좀주세요.



답변

다음 줄을 사용하여 onclick 이벤트 내에서 소프트 키보드를 수동으로 표시했으며 키보드가 표시됩니다.

InputMethodManager inputMethodManager =
    (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(
    linearLayout.getApplicationWindowToken(),
    InputMethodManager.SHOW_FORCED, 0);

그러나 활동이 열리는 동안 여전히 이것을 열 수 없으므로 이에 대한 해결책이 있습니까?


답변

매니페스트 파일 <activity>에서 활동이 시작될 때 키보드를 표시하려는에 다음을 추가해보세요 .

android:windowSoftInputMode="stateVisible"

이렇게하면 활동이 시작될 때 키보드가 표시됩니다.

더 많은 옵션을 보려면 문서를 확인하세요 .


답변

아래 코드를 따르십시오. 나는 당신의 문제가 해결 될 것이라고 확신합니다.

if (imm != null){
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
   } 


답변

이것은 작품입니다

<activity
    ...
    android:windowSoftInputMode="stateVisible" >
</activity>

또는

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


답변

내가 필요한 것은 매우 정확한 순간에 키보드를 노출하는 것뿐이었습니다. 이것은 나를 위해 일했습니다! 감사합니다 Benites.

    private Handler mHandler= new Handler();

그리고 매우 정확한 순간에 :

    mHandler.post(
    new Runnable() {
        public void run() {
            InputMethodManager inputMethodManager =  (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
            inputMethodManager.toggleSoftInputFromWindow(yourEditText.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);
            yourEditText.requestFocus();
        }
    }); 


답변

다음 줄을 사용하여 onclick 이벤트 내에서 수동으로 소프트 키보드를 표시했습니다.

public void showKeyboard(final EmojiconEditText ettext){
          ettext.requestFocus();
          ettext.postDelayed(new Runnable(){
            @Override public void run(){
              InputMethodManager keyboard=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
              keyboard.showSoftInput(ettext,0);
            }
          }
        ,200);
        }


답변

onResume 메소드에 넣으십시오.

findViewById(R.id.root_view_of_your_activity_layout).post(
new Runnable() {
    public void run() {
        InputMethodManager inputMethodManager =  (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.toggleSoftInputFromWindow(yourEditText.getApplicationWindowToken(),     InputMethodManager.SHOW_FORCED, 0);
        yourEditText.requestFocus();
    }
});

OS가 onResume 메서드를 실행할 때 모든 뷰를 그릴 수 있는지 확인할 수 없기 때문에 runnable이 필요하므로 루트 레이아웃에서 호출 된 post 메서드는 모든 뷰가 준비 될 때까지 대기하게합니다.