안드로이드 키보드 보이기, 숨기기



 

특정 동작을 했을 때, 소프트 키보드를 보여주고 싶을때에 사용한다.
키보드를 제어하려면 InputMethodManager객체를 사용한다.
InputMethodManager는 "android.view.inputmethod"에 존재한다.

이 객체는 activity에서, getSystemService로 구할 수 있으며, 변수는 Context.INPUT_METHOD_SERVICE로 구하여 오면 된다.

키보드를 보여줄때는,
public boolean showSoftInput (View view, int flags, ResultReceiver resultReceiver) 를 사용하고,

키보드를 가릴때는,
public boolean hideSoftInputFromWindow (IBinder windowToken, int flags) 를 사용하면 된다.

예를 들어보자.

[ ImmActivity.java ]

 

import android.view.inputmethod.InputMethodManager;

import android.widget.EditText;

 

public class ImmActivity extends Activity {

        

private InputMethodManager imm;

private EditText searchTxt;

      

     /** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState, CURRENT_MENU);

setContentView(R.layout.main);

init();

}

 

private void init(){

    imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

    searchTxt = (EditText) findViewById(R.id.search_edittext);

}

 

/**

* 키보드를 가림.

*/

private void hideKeyboard(){

    imm.hideSoftInputFromWindow(searchTxt.getWindowToken(), 0);

}

 

/**

* 키보드를 보여줌.

*/

private void showKeyboard(){

    imm.showSoftInput(searchTxt, 0);

}

}

 

굉장히 간단한 예제이므로, 별도의 설명이 필요없는…
그냥 위와 같이, init()에서 선언해주고, 필요에 따라서, showKeyboard(), hideKeyboard()를 호출하여 주면 된다는…
설명할 것도 없는 것을 주저리 주저리 적은듯…

 + 

내가 자주 사용하는 ,hideKeyboard() function

private void hideKeyboard(){

InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 

inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

}


신고

가로모드에서 editText 키보드가 화면을 덮을때 !



<EditText 

....
android:imeOptions="flagNoExtractUi" />


위의 글을 넣어주면 됩니다.
 
저작자 표시
신고

안드로이드 키보드 옵션




안드로이드는 모바일 프로그래밍이기 때문에, 화면의 제약이 많습니다.
이에 따라서, 화면을 효율적으로 사용하기 위하여, 키보드가 올라왔을경우, 화면을 어떻게 표현할 것인가가 중요한 이슈가 되기도 하죠.

그래서, 안드로이드는 키보드가 화면에 보여질때 어떻게 표현할 것인가에 대해서, 몇가지 가이드라인을 주고 있습니다.

제가 겪은 일중 하나는, 안드로이드 키보드가 올라올시 레이아웃이 재조정되는 현상이 있었습니다. 
저는, 키보드가 올라오더라도 레이아웃이 유지되기를 원했습니다. 그래서, 
이것을 해결하기 위해, 매니페스트 파일을 조정해 주었습니다.

android:windowSoftInputMode="adjustPan"
저는 위의 방법을 썼네요, 

네임플레이스와, 옵션은 다음과 같습니다. 

android:windowSoftInputMode – 소프트 키보드 상태 : 액티비티가 사용자 관심의 포커스를 받을 때 소프트 키보드가 보여지는지 여부를 설정한다.

액티비티 메인 윈도우에 대한 조정 : 소프트 키보드를 위한 공간을 만들기 위해 액티비티 메인 윈도우를 작게 줄일 지의 여부 또는 메인 윈도우 일부가 소프트 키보드에 의해 가려질 때 현재 포커스를 보이도록 하기 위해 메인 윈도우의 컨텐트가 상하로 움직일 지의 여부를 설정한다.

[ 안드로이드 키보드 보이기 모드 옵션 ]

stateUnspecified : 소프트 키보드 상태에 대해 시스템이 적절한상태를 선택하거나 테마 설정값을 따른다. 소프트 키보드의 디폴트 설정 값.
stateUnchanged : 소프트 키보드는 마지막 상태로 유지
stateHidden : 사용자 액티비티를 선택할 때 소프트 키보드는 숨겨짐
stateAlwaysHidden : 액티비티의 메인 위도우가 입력 포커스를 가질 때 소프트 키보드는 항상 숨겨짐
stateVisible : 사용자가 액티비티 메인 위도우 앞으로 갈 때 소프트 키보드 보여짐
stateAlwaysVisible : 사용자가 액티비티를 선택할 때 소프트 키보드 보여짐
adjustUnspecified : 스크롤 할 수 잇는 레이아웃 뷰들을 가지고 있다면 윈도우 크기 재조정. 메인 윈도우의 디폴트 값. 시스템이 Pan, Resize등 알아서 선택. 스크롤이 가능한가?, 레이아웃에 여백이 얼마나 있는지 등을 고려해서, 알아서 조정해준다.
adjustResize : 스크린에 소프트 키보드 공간을 만들기 위해메인 윈도우 크기가 항상 재조정 됨. 뷰의 크기가 작아지죠, 하지만 모든 뷰가 보입니다.
adjustPan : 소프트 키보드 공간을 만들기 위해 메인 윈도우 크기가 재조정 되지 않음. 포커스를 받은 뷰가 보이게 할려면, 스크롤 하여 이동하여야 합니다. 입력받는 뷰는 보이지만, 다른 뷰들이 가려지는 현상이 있습니다. 다른 뷰들이 보이려면, back키로 키보드를 닫아야 합니다.

 


신고