안드로이드 화면 키보드 자동 팝업


140

내 앱 중 하나에 "열기 화면"(기본적으로 메뉴)이 있고 그 EditText뒤에 몇 가지 Button가 있습니다. 문제는 여러 사용자가 앱을 열 때을 터치하지 않고도 화면 키보드가 자동으로 팝업된다는보고입니다 EditText. 내가 알 수있는 한,이 모든 사용자는 HTC Hero를 사용하고 있습니다.

1.5의 버그입니까? 내가 할 수있는 일이 있습니까?


1
버그라면 스프린트 히어로 일 가능성이 높습니다. Sprint는 판매하는 Heros에 버그가있는 Android 버전을 가지고 있으며 버그 수정을 서두르는 데 서두르지 않습니다. Sprint Heros와 다른 모든 Android 기기 간에는 동작에 많은 차이가 있습니다. 내가 아는 한 유럽 버전과 같은 다른 버전의 Hero에는 이러한 문제가 없습니다.
Mark B

불행히도 유럽의 영웅은 주요 문제가 있으며 빌드 번호에 따라 변경되지만 3-4 개의 주요 버그가 발생했습니다.
Donal Rafferty

답변:


279

활동의 onCreate 메소드에서 다음 코드 행을 사용하여 사용자가 EditText를 클릭 할 때만 키보드가 팝업되도록 할 수 있습니다

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

이것은 나를 위해 작동하지 않습니다 (2.2 MyTouch 3G). 내 onCreate () 메서드에서 setSoftInputMode ()를 호출합니다. EditText는 여전히 키보드를 보여줍니다 :(
Nate

이것은 나를 위해 일했습니다. Android 2.3.4를 실행 중이고 <uses-sdk android : minSdkVersion = "3"/>를 사용하여 개발
Sandy

78
또는 사용 android:windowSoftInputMode="stateHidden"여기
Swato

그래서 나를 혼란스럽게하는 것은 이미 키보드를 숨기고있는 로그인 활동이 있다는 것입니다. 등록 활동을했지만 키보드가 기본적으로 팝업됩니다. 그렇다면 로그인하는 사람은 이것을 어떻게 피합니까? 로그인 활동에서 setSoftInputMode를 찾을 수 없거나 activity.xml에서 windowSoftInputMode 속성을 찾을 수 없습니다.
Chucky

항상 작동하지는 않습니다. 일부 장치에서 SOFT_INPUT_STATE_ALWAYS_HIDDEN은 활동에서 마지막이 아닌 편집 텍스트가 소프트 키보드를 표시 할 수 없다는 오류를 발생시킵니다. 매니페스트에서 "android : windowSoftInputMode ="stateHidden ""을 사용하는 것도 동일한 효과를 갖습니다. 개발자 문서에 따르면 소프트 키보드는 강제로 설정하지 않으면 자동으로 표시되지 않지만 이는 잘못된 것입니다.

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

이것은 안드로이드 3.0, 3.1, 3.2, 4.0에서 작동합니다-편집에 사용되는 편집기 (Eclipse 3.7)

소프트웨어 키보드를 숨기고 자하는 각 활동에 대해 애플리케이션의 매니페스트 XML 파일에 'windowSoftInputMode = "stateHidden"'을 배치하십시오. 이는 키보드가 자동으로 나타나지 않고 사용자가 컴퓨터를 '클릭'해야한다는 의미입니다. 텍스트 필드를 불러옵니다. 나는 약 1 시간 동안 효과가있는 것을 찾아서 공유 할 것이라고 생각했다.


내가 지금까지 찾은 최고의 솔루션. 키보드를 열지 않고 필드의 초점을 맞 춥니 다. 4.1.2의 Nexus S에서 작동
alexismorin

1
android : windowSoftInputMode = "stateHidden | adjustNothing"은 프래그먼트를 사용하고 키보드가 레이아웃을 변경하고 싶지 않은 경우에도 유용합니다
whyoz

6

이것을 AndroidManifest.xml에 추가하십시오 .

android:windowSoftInputMode="stateHidden|adjustResize"

완벽하게 작동합니다. :)


1
답변 감사합니다. 죄송하지만 지금 키보드를 어떻게 호출 할 수 있습니까? 전화를 걸 때 나타나지 않습니다 requestFocus().
도쿠가와 다케시 YD

6

이 코드는 모든 안드로이드 버전에서 작동합니다 :

@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_login);

 //Automatic popping up keyboard on start Activity

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

 or

 //avoid automatically appear android keyboard when activity start
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
 }

어떤 팝업이 표시되고 어떤 팝업이 표시되지 않는지 알려주기위한 Plus 1
Demon 앱 프로그래머

4

이것을 XML의 부모 레이아웃에 추가하십시오.

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

활동이 시작될 때 포커스가 editText에 있지 않도록합니다.


3

활동의 onCreate () 메소드에서 이것을 사용할 수 있습니다

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

이 코드를 AndroidManifest.xml의 활동 태그에 붙여 넣습니다.

android:windowSoftInputMode="stateVisible"

2
"stateVisible"이 아닌 "stateHidden"을 의미한다고 생각합니다.
stevehs17

2

활동 태그 아래 Android Mainfest.xml 의 한 줄의 코드를 추가 할 수 있습니다

 <activity
        android:name="com.sams.MainActivity"
        android:windowSoftInputMode="stateVisible" >
 </activity>

도움이 될 수 있습니다.


1

해당 Android 버전에서보기가 팽창되면 포커스는 기본적으로 첫 번째 초점 제어로 설정되며 물리적 키보드가 없으면 화상 키보드가 나타납니다.

이 문제를 해결하려면 다른 곳에 초점을 명시 적으로 설정하십시오. 포커스가 EditText 이외의 것으로 설정되어 있으면 화상 키보드가 나타나지 않습니다.

에뮬레이터에서 Android 1.5를 실행하여이를 테스트 해 보셨습니까?


나는 에뮬레이터에서 그것을 시도했다 (그리고 내가 미쳤는지 확인하기 위해 다시 시도했다). "올바른"역할을합니다 (키보드 팝업이 없음을 의미). 또한 처음 에이 글을 쓸 때 G1은 1.5로 실행 되었으며이 방식으로 작동하지 않았습니다 (키보드가 "숨겨진"일 때).
Jeremy Logan

나는 여전히 초기 초점과 관련이 있다고 확신합니다. 어쩌면 HTC Hero에만 해당되는 것일 수도 있지만 포커스를 다른 것으로 명시 적으로 설정하여 사용자에게 맞는지 확인하려고합니다.
Mark B

"아무것도"초점을 맞출 방법이 있습니까?
Jeremy Logan

1
이것은 나를 위해 작동하지 않습니다 (2.2 MyTouch 3G). 내 onCreate () 메서드에서 뷰의 두 번째 위젯 인 Button에서 requestFocus ()를 명시 적으로 호출합니다. EditText는 여전히 키보드를 보여줍니다 :(
Nate

1

프로그래밍 방식으로 할 수 있습니다.

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

또는 설정 android:windowSoftInputMode="stateHidden"<activity tag내부AndroidManifest.xml


1

수입품이있는 곳에 이것을 포함하십시오 :

import android.view.WindowManager;

OnCreate 부분에 다음 코드를 추가하십시오.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ....
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

0
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
        imm.ShowSoftInput(_enterPin.FindFocus(), 0);

* 이것은 Android.xamarin 및 FindFocus () 용입니다. 위 코드 앞에 _enterPin.RequestFocus ()가 있으므로 _enterPin EditText에 대한 키보드를 표시하므로 현재 포커스가있는이 뷰를 기반으로하는 계층 구조의 뷰를 검색합니다.

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