2017년 1월 8일 일요일

Android App 시작 시점에 표시되는 virtual keyboard 숨기기

App의 시작 화면에 EditText가 있어 시작될 때 마다
Virtual Keyboard가 항상 표시되는 상황이라 귀찮아서 숨기려 하여 찾아봄.

일단 인터넷에서 소개되는 방법은..

InputMethodManager를 사용하여 virtual keyboard를 숨기는 방법

http://stackoverflow.com/a/1109108

You can force Android to hide the virtual keyboard using the InputMethodManager, calling hideSoftInputFromWindow, passing in the token of the window containing your focused view.
// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {  
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
This will force the keyboard to be hidden in all situations. In some cases you will want to pass in InputMethodManager.HIDE_IMPLICIT_ONLY as the second parameter to ensure you only hide the keyboard when the user didn't explicitly force it to appear (by holding down menu).
shareimprove this answer

여기가 좀 더 설명이 자세하다.
https://realm.io/kr/news/tmi-dismissing-keyboard-ios-android/

하지만 난 Activity내의 fragment 중 EditText로 인한 virtual keyboard를
App 시작 시점부터 띄위지 않도록 하기 위한 방법을 찾던지라
위 방법은 내가 원한 상황에서 적용되기는 어려웠음.

결국 찾아낸 방법은 다음과 같다.

EditText가 아닌 다른 item에 focus를 주어 Virtual Keyboard를 띄우지 않는 방법

http://stackoverflow.com/a/1662088


1419down voteaccepted
Excellent answers from Luc and Mark however a good code sample is missing:
<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:focusable="true" 
    android:focusableInTouchMode="true"
    android:layout_width="0px" 
    android:layout_height="0px"/>

<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:nextFocusUp="@id/autotext" 
    android:nextFocusLeft="@id/autotext"/>
shareimprove this answer


좀 예제가 일반적이지는 않아 나의 경우를 말하면
EditText의 다른 item에 android:focusable="true", android:focusableInTouchMode="true"를 주어
EditText에 focus가 가지 않도록 하여 virtual keyboard를 자동으로 띄우지 않도록 하였음.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:focusableInTouchMode="true">

.........
                    <EditText
                        android:id="@+id/insert_entry_title"
                        android:layout_width="fill_parent"
                        android:layout_height="32dp"

댓글 없음:

댓글 쓰기