활동 시작시 키보드가 표시되지 않도록 방지


265

Edit Text입력 이있는 활동이 있습니다. 활동이 초기화되면 Android 키보드가 표시됩니다. 사용자가 입력에 집중할 때까지 키보드를 어떻게 숨길 수 있습니까?


93
당신의 매니페스트<activity android:windowSoftInputMode="stateHidden" ...>
idiottiger


1
함께 사용하는 방법 android:windowSoftInputMode="adjustPan"?
János

4
@ János android : windowSoftInputMode = "adjustPan | stateHidden"
Alexey Strakh 2016 년

이 코멘트에 대답은, 내가 찾고 있어요 대답했다 stackoverflow.com/a/23605510/6942602
korchix

답변:


436

나는 다음이 효과가 있다고 생각한다

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

나는 전에 이런 종류의 것을 위해 그것을 사용했습니다.


숫자 전용 키패드로 설정하는 방법이 있습니까? 즉 12Key 키보드?
Mohamed Khamis

@MohamedKhamis input.setRawInputType (Configuration.KEYBOARD_12KEY);
blockwala

1
예, 여전히 작동합니다. @SagarNayak 왜 키보드를 숨기고 싶 EditText습니까? :) 이것은 활동이 시작될 때 키보드를 숨기는 것입니다.EditText
Martynas

@Devealte 7 년 후 저를 위해 일했습니다. onCreate에 넣었습니까?
Dymas

@Dymas 예, 방금 몇 달 전에
고쳤습니다

180

이것을 시도하십시오-

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

그렇지 않으면 매니페스트 파일의 활동에 선언하십시오.

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
          android:label="@string/app_name"
          android:windowSoftInputMode="stateHidden"
          >

이미 사용 된 경우 android:windowSoftInputMode같은 값 adjustResize또는 adjustPan두 개의 값을 같이 결합 할 수 있습니다 :

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

이것은 필요할 때마다 키보드를 숨기지 만 키보드가 표시되어야 할 경우 활동보기를 이동합니다.


3
코드와 XML로 보여 주셔서 감사합니다! 실제로 이것은 가장 정답입니다! 특히 3 분이 지난 후에 두 가지 방법을 모두 쓰지 않았기 때문에 ;-)
eric

34

테마를 사용하여 모든 활동에 숨기기

<style name="MyTheme" parent="Theme">
    <item name="android:windowSoftInputMode">stateHidden</item>
</style>

테마를 설정

<application android:theme="@style/MyTheme">

이 글로벌 접근 방식과 같습니다.
Rm558

1
이것은 내가 여러 장소에서 다른 테마를 사용하면서 작동했습니다
nmxprime

22

이 두 속성을 부모 레이아웃에 추가하십시오 (예 : 선형 레이아웃, 상대적 레이아웃).

android:focusable="false"
android:focusableInTouchMode="false" 

그것은 트릭을 할 것입니다 :)


2
이것은 나를 위해 작동하지 않지만 trueJack T의 답변에 따라 작동 하도록 설정했습니다 . 최근 버전에서 동작이 변경 되었습니까?
Protean

내 대답 외에도 매니페스트 및 편집 텍스트에있는 다른 속성도 확인해야합니다.
대중의 왕

나는 그들에게 가장 기본적인 속성을 가지고 있습니다. falseEditText 상자에서 포커스를 얻는 것이므로 아이디어 를 설정 해야하는 이유를 이해할 수 없습니다 .
Protean

어쩌면 부모 레이아웃에서 벗어나서 EditText 상자에서 포커스를 얻었습니까? 그러나 더 이상은 아닌 것 같습니다.
Protean

13

매니페스트 파일로 선언하십시오.

<activity android:name=".HomeActivity"
      android:label="@string/app_name"
      android:windowSoftInputMode="stateAlwaysHidden"
      >

11

API 레벨 21을 사용하는 경우 editText.setShowSoftInputOnFocus (false)를 사용할 수 있습니다.


9

그냥 AndroidManifest.xml에 추가하십시오

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

8

manifest.xml 파일에 이것을 추가하십시오.

<activity android:name=".MainActivity"
            android:windowSoftInputMode="stateHidden">

모두 끝났습니다.


7

"문제"가있는 .xml 레이아웃 파일 의 직접 상위 레이아웃에 다음 코드 행을 작성할 수도 있습니다 .

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

예를 들면 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ...
    android:focusable="true"
    android:focusableInTouchMode="true" >

    <EditText
        android:id="@+id/myEditText"
        ...
        android:hint="@string/write_here" />

    <Button
        android:id="@+id/button_ok"
        ...
        android:text="@string/ok" />
</LinearLayout>


편집하다 :

EditText가 다른 레이아웃에 포함 된 경우의 예 :

<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ... >                                            <!--not here-->

    ...    <!--other elements-->

    <LinearLayout
        android:id="@+id/theDirectParent"
        ...
        android:focusable="true"
        android:focusableInTouchMode="true" >        <!--here-->

        <EditText
            android:id="@+id/myEditText"
            ...
            android:hint="@string/write_here" />

        <Button
            android:id="@+id/button_ok"
            ...
            android:text="@string/ok" />
    </LinearLayout>

</ConstraintLayout>

핵심은 EditText가 직접 초점을 맞출 수 없도록하는 것입니다.
안녕! ;-)


6

나를위한 최고의 솔루션, 수업 붙여 넣기

@Override
public void onResume() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onResume();
}

@Override
public void onStart() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onStart();
}

3

키보드를 숨기는 기능.

public static void hideKeyboard(Activity activity) {
    View view = activity.getCurrentFocus();

    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

AndroidManifext.xml 파일에서 키보드를 숨 깁니다.

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:windowSoftInputMode="stateHidden">

3

@Lucas의 답변을 확대하려면 :

초기 라이프 사이클 이벤트 중 하나에서 활동에서 이것을 호출하십시오.

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

코 틀린 예 :

override fun onResume() {
  super.onResume()

  window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}

2

각 요소에 대해이 고유 속성을 시도 할 수 있습니다

TextView mtextView = findViewById(R.id.myTextView);
mtextView.setShowSoftInputOnFocus(false);

요소가 초점을 맞추는 동안 키보드가 표시되지 않습니다


이것은 저자의 질문에 대답 할 수 있지만, 설명 할 단어 및 / 또는 문서 링크가 부족합니다. 원시 코드 스 니펫은 주변에 문구가 없으면 크게 도움이되지 않습니다. 좋은 답변을 작성하는 방법이 매우 도움 이 될 수도 있습니다. 답변을 편집하십시오- 검토에서
Nick

1
//to hide the soft keyboard
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

0

당신의 활동에 이것을 추가하십시오 :

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
      if (getCurrentFocus() != null) {
           InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
           imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
      }
      return super.dispatchTouchEvent(ev);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.