2017-11-07 1 views
0

내 앱 레이아웃 중 하나에서 텍스트 편집이 있고, 실제로 만지면이 EditText가 키보드 만 열어 줄 것을 원합니다.EditText가 활동 시작시 키보드를 불러 오지 못하게 하시겠습니까?

이제는 앱이 열릴 때마다 EditText가 열리 며, 이는 내가 원하는 바가 아닙니다.

나는이 질문하고 무엇
android:focusable="false" <--- Prevents keyboard from opening at all. 

android:focusable="true" 
android:focusableInTouchMode = "true"  <--- These tags give me the same result as no tags (keybaord will open on activity start) 

android:focusedByDefault = "true" <--- Only available in API >= 23 

, 왜 그것이 글고 치기에 기본 포커스를 사용하지 않도록 열심히이다

나는이 문제를 해결하는 여러 가지 XML 태그를 시도? 확실히 나는 이것을하기위한 쉬운 방법을 놓치고있다.

편집 : 그러나, 나는이 솔루션을 좋아하지 않는다 windowSoftInputMode = "stateHidden" : 안드로이드 : 내 AndroidManifest를이 라인을 추가하면 문제가 해결되었습니다. 이것이 매니페스트에있는 것 같아서 변경해야하는 단일 EditText보다 더 많은 UI 요소에 영향을 미칩니다. 당신이 당신의 활동에 사용하는 테마에 깊이 파고 경우

답변

0

또는 루트 레이아웃 요소에 포커스를 설정할 수 있습니다

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

예 :

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

    <EditText 
     android:inputType="text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 
+0

이 그것을 할 수있는 최선의 방법처럼 보인다. 고맙습니다! –

+0

대단히 환영합니다. 해결책이 당신에게 좋으면 나는 행복하다. 나는 이것이 최선의 방법인지는 모르겠지만, 분명히 내가 아는 작업 버전이다. – wyzard

0

사용 android:windowSoftInputMode="stateHidden"

, 당신은 windowSoftInputMode의 기본값은 stateUnspecified|adjustPan 것을 발견 할 것이다. 그리고 문서에서 :

stateUnspecified : 시스템이 가장 잘 사용한다고 생각하는 것을 사용하십시오. 이것이 기본값입니다.

실행중인 Android 기기에 따라 결과가 달라질 수 있습니다. API-26 에뮬레이터에서 사례를 재연 해 보았는데 키보드가 나타나지 않았습니다. stateHidden을 사용하면 EditText가 자체적으로 포커스를 얻었을 때 활동이 시작될 때 소프트 키보드가 나타나지 않도록 할 수 있습니다.

이 문제를 해결하는 또 다른 방법은 UI의 일부 다른 요소에 requestFocus을 붙여서 EditText가 포커스를받을 첫 번째 UI 요소가 아닌지 확인하는 것입니다. 내 경험에 의하면 이것은 일종의 해킹이며 접근성을 망칠뿐입니다. 가장 안전하고 깨끗한 방법은 실제로 stateHidden을 사용하는 것입니다.

stateHidden : 일반적으로 적절한 경우 (사용자가 창을 탐색 할 때) 소프트 입력 영역을 숨 깁니다.

다른 UI 요소에는 영향을주지 않습니다. 화면 배경에 따라 adjustPan도 사용할 수 있습니다.

관련 문제