활동이 시작될 때 소프트 키보드를 숨기는 방법


151

android:windowSoftInputMode="stateVisible"매니페스트에 편집 텍스트가 있습니다. 이제 활동을 시작할 때 키보드가 표시됩니다. 숨기는 방법? android:windowSoftInputMode="stateHidden키보드가 표시되면 앱을 최소화하고 다시 시작하여 키보드가 표시되므로 사용할 수 없습니다 . 나는 함께 노력했다

InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

그러나 작동하지 않았습니다.

답변:


1

xml을 사용하지 않으려면 키보드를 숨기기 위해 Kotlin Extension을 만드십시오.

// In onResume, call this
myView.hideKeyboard()

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

사용 사례에 따른 대안 :

fun Fragment.hideKeyboard() {
    view?.let { activity?.hideKeyboard(it) }
}

fun Activity.hideKeyboard() {
    // Calls Context.hideKeyboard
    hideKeyboard(currentFocus ?: View(this))
}

fun Context.hideKeyboard(view: View) {
    view.hideKeyboard()
}

소프트 키보드 를 표시 하는 방법

fun Context.showKeyboard() { // Or View.showKeyboard()
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.toggleSoftInput(SHOW_FORCED, HIDE_IMPLICIT_ONLY)
}

편집 텍스트에 대한 포커스를 동시에 요청할 때 간단한 방법

myEdittext.focus()

fun View.focus() {
    requestFocus()
    showKeyboard()
}

보너스 단순화 :

다음을 사용하기위한 요구 사항 제거 getSystemService: Splitties Library

// Simplifies above solution to just
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)

361

에서 AndroidManifest.xml:

<activity android:name="com.your.package.ActivityName"
          android:windowSoftInputMode="stateHidden"  />

또는 시도

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

확인하시기 바랍니다


3
감사합니다 android:windowSoftInputMode="stateHidden"
Shylendra Madda

2
실제로 편집 텍스트에 초점을 맞추지 못하게하는 것에 대한 큰 해답도 있습니다. stackoverflow.com/questions/4668210/…
Boris Treukhov

204

키보드를 표시하거나 숨기려면 다음 기능을 사용하십시오.

/**
 * Hides the soft keyboard
 */
public void hideSoftKeyboard() {
    if(getCurrentFocus()!=null) {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
}

/**
 * Shows the soft keyboard
 */
public void showSoftKeyboard(View view) {
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    view.requestFocus();
    inputMethodManager.showSoftInput(view, 0);
}

4
조각에 있거나 주요 활동에 있지 않은 사람들을위한 Context.INPUT_METHOD_SERVICE
Oliver Dixon

7
당신은 이것을 시도 할 수 있습니다. 활동에서 전화하면 작동합니다. getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) ‌;
Sinan Dizdarević

리스너 내에서 이것을 호출해야한다면 어떻게해야합니까? 같은onFocusChange()
André Yuhai

44

editText의 상위 뷰에 두 개의 속성을 추가하십시오.

android:focusable="true"
android:focusableInTouchMode="true"

36

이것을 액티비티 태그 안의 매니페스트에 넣으십시오.

  android:windowSoftInputMode="stateHidden"  

또는 android : windowSoftInputMode = "stateUnchanged"-다음과 같이 작동합니다. 아직 표시되지 않은 경우 표시하지 않지만 활동에 들어갈 때 열려 있으면 열어 둡니다).
Sujeet Kumar Gupta

나중에 당신은 맞습니다. 하지만 방향이 바뀌면 어떨까요?
Saneesh

26

이 시도:

<activity
    ...
    android:windowSoftInputMode="stateHidden|adjustResize"
    ...
>

자세한 내용 은 이것을 보십시오 .


14

새로운 활동 시작 또는시의 softkeyboard 숨기려면 onCreate(), onStart()당신이 아래의 코드를 사용할 수있는 등 :

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

10

AndroidManifest.xml 사용

<activity android:name=".YourActivityName"
      android:windowSoftInputMode="stateHidden"  
 />

자바 사용하기

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

위의 솔루션 키보드를 사용하여 activiy가 생성 될 때 포커스를 얻지 못하고 편집 텍스트를 사용하지만 다음을 사용하여 터치하면 텍스트를 잡습니다.

EditText에 추가하십시오

<EditText
android:focusable="false" />

EditText의 리스너를 추가하십시오.

youredittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
    v.setFocusable(true);
    v.setFocusableInTouchMode(true);
    return false;
}});

7

xml 파일에 다음 텍스트를 추가하십시오.

<!--Dummy layout that gain focus -->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:orientation="vertical" >
            </LinearLayout>

6

나는 이것이 효과가 있기를 희망하며 많은 방법을 시도했지만 이것은 나를 위해 일했다 fragments. 이 줄을 onCreateview / init에 넣으십시오.

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

5

New Activity start 또는 onCreate (), onStart () 메소드 등에서 소프트 키보드를 숨기려면 아래 코드를 사용하십시오.

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

버튼 클릭시 소프트 키보드를 숨기려면 클릭하십시오.

View view = this.getCurrentFocus();

    if (view != null) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        assert imm != null;
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

5

SOFT_INPUT_STATE_HIDDEN 대신 SOFT_INPUT_STATE_ALWAYS_HIDDEN을 사용하십시오.

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

5

이 속성을 매니페스트로 추가하십시오.

android:windowSoftInputMode="stateHidden" 

4

이 코드를 자바 파일로 만들고 object에 대한 인수를 edittext에 전달하십시오.

private void setHideSoftKeyboard(EditText editText){
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}

4

AndroidManifest.xml에서 구성을 설정할 수 있습니다

예:

<activity
    android:name="Activity"
    android:configChanges="orientation|keyboardHidden"
    android:theme="@*android:style/Theme.NoTitleBar"
    android:launchMode="singleTop"
    android:windowSoftInputMode="stateHidden"/>

4

활동을 시작할 때 처음으로 소프트 키보드를 숨기려면 다음 코드를 사용하십시오.

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

3

이것도 시도

Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

3

위의 답변도 정확합니다. 나는 manifest.xml에서 활동을 시작할 때 키보드를 숨기는 두 가지 방법이 있다는 것을 간단히 말하고 싶다. 예 :

<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
  • 위의 방법은 활동에 들어갈 때 항상 숨 깁니다.

또는

<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
  • 이것은 변경하지 마십시오 (예 : 아직 표시되지 않은 경우 표시하지 않지만 활동에 들어갈 때 열린 경우 열어 두십시오).

2

이것이 내가 한 일입니다.

yourEditText.setCursorVisible(false); //This code is used when you do not want the cursor to be visible at startup
        yourEditText.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.onTouchEvent(event);   // handle the event first
                InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {

                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  // hide the soft keyboard
                    yourEditText.setCursorVisible(true); //This is to display cursor when upon onTouch of Edittext
                }
                return true;
            }
        });

2

애플리케이션이 Android API 레벨 21 이상을 대상 으로하는 경우 사용 가능한 기본 방법이 있습니다.

editTextObj.setShowSoftInputOnFocus(false);

EditTextXML 태그에 아래 코드를 설정했는지 확인하십시오 .

<EditText  
    ....
    android:enabled="true"
    android:focusable="true" />

1

이 시도.

먼저 검색 가능한 XML에서 필드 (이름 및 힌트 등)는 @string리터럴 문자열이 아닙니다.

그런 다음 method onCreateOptionsMenu에는 ComponentName패키지 이름과 완료된 클래스 이름 (패키지 이름) 이 포함 된 객체가 있어야합니다 .- SearchView구성 요소가있는 활동이 검색 결과 표시와 동일한 경우getComponentName() Google Android 개발자가 말한 것처럼 .

나는 많은 솔루션을 시도했고 많은 후에이 솔루션이 저에게 효과적입니다.


1
Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

this one worked for me

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

작동합니다


이 코드는 질문에 대답 할 수 있지만,이 코드가 질문에 응답하는 이유 및 / 또는 방법에 대한 추가 컨텍스트를 제공하면 장기적인 가치가 향상됩니다.
rollstuhlfahrer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.