안드로이드 키보드, 키패드 기능
<안드로이드 키보드 옵션, AndroidManifest.xml >
안드로이드 키보드가 올라올시 레이아웃이 재조정되는 현상이 있었습니다.
키보드가 올라오더라도 레이아웃이 유지되기를 원하는 경우 매니페스트 파일을 조정 필요
android:windowSoftInputMode="adjustPan"
android:windowSoftInputMode – 소프트 키보드 상태 : 액티비티가 사용자 관심의 포커스를 받을 때 소프트 키보드가 보여지는지 여부를 설정
액티비티 메인 윈도우에 대한 조정 : 소프트 키보드를 위한 공간을 만들기 위해 액티비티 메인 윈도우를 작게 줄일 지의 여부 또는
메인 윈도우 일부가 소프트 키보드에 의해 가려질 때 현재 포커스를 보이도록 하기 위해 메인 윈도우의 컨텐트가 상하로 움직일 지의 여부를 설정한다.
[ 안드로이드 키보드 보이기 모드 옵션 ]
stateUnspecified : 소프트 키보드 상태에 대해 시스템이 적절한상태를 선택하거나 테마 설정값을 따른다. 소프트 키보드의 디폴트 설정 값.
stateUnchanged : 소프트 키보드는 마지막 상태로 유지
stateHidden : 사용자 액티비티를 선택할 때 소프트 키보드는 숨겨짐
stateAlwaysHidden : 액티비티의 메인 위도우가 입력 포커스를 가질 때 소프트 키보드는 항상 숨겨짐
stateVisible : 사용자가 액티비티 메인 위도우 앞으로 갈 때 소프트 키보드 보여짐
stateAlwaysVisible : 사용자가 액티비티를 선택할 때 소프트 키보드 보여짐
adjustUnspecified : 스크롤 할 수 잇는 레이아웃 뷰들을 가지고 있다면 윈도우 크기 재조정. 메인 윈도우의 디폴트 값. 시스템이 Pan, Resize등 알아서 선택. 스크롤이 가능한가?, 레이아웃에 여백이 얼마나 있는지 등을 고려해서, 알아서 조정해준다.
adjustResize : 스크린에 소프트 키보드 공간을 만들기 위해메인 윈도우 크기가 항상 재조정 됨. 뷰의 크기가 작아지죠, 하지만 모든 뷰가 보입니다.
adjustPan : 소프트 키보드 공간을 만들기 위해 메인 윈도우 크기가 재조정 되지 않음. 포커스를 받은 뷰가 보이게 할려면, 스크롤 하여 이동하여야 합니다. 입력받는 뷰는 보이지만, 다른 뷰들이 가려지는 현상이 있습니다. 다른 뷰들이 보이려면, back키로 키보드를 닫아야 합니다.
// onCreate 에서 아래 내용 추가하면, 앱 실행시 자동으로 키보드 올라옴. etMemo = (EditText) findViewById(R.id.etMemo); // 임의의 EditText etMemo.requestFocus();
// 키보드 종료가 필요한 곳에서 아래의 onBackPressed() 함수 호출 InputMethodManager imm = null; imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); @Override public void onBackPressed() { imm.hideSoftInputFromWindow(etMemo.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); super.onBackPressed(); }
android:layout_width="260px" android:layout_height="55px" android:layout_gravity="left" android:layout_marginLeft="130px" android:layout_marginTop="25px" android:background="#00000000" android:maxLength="11" android:singleLine="true" android:gravity="center_horizontal|right" android:textStyle="bold" android:text="" android:textColor="#6a6a6a" android:textSize="24px" android:inputType="number" android:imeOptions="actionDone" android:cursorVisible="false">
// onCreate 내에서.. EditText et_price = (EditText) findViewById(R.id.et_price); et_price.setOnKeyListener(mKeyListener); et_price.setOnEditorActionListener(new OnEditorActionListener(){ @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { Log.d("MiniApp", "et_price OnEditorActionListener,"+actionId+","+event); if (actionId == EditorInfo.IME_ACTION_DONE) { // et_price 입력창에서 키보드의 확인 버튼을 누를때 String sPrice = et_price.getText().toString(); Log.d("MyTag", "KEYCODE_ENTER, Price="+sPrice); } return false; } });
EditText et_price = (EditText) findViewById(R.id.et_price); et_price.setOnKeyListener(mKeyListener);
// mKeyListener View.OnKeyListener mKeyListener = new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { Log.d("MyTag", "onKey, keycode="+keyCode+", keyEvent="+event); switch(v.getId()){ case R.id.et_price: if((keyCode == EditorInfo.IME_ACTION_DONE) || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction()==KeyEvent.ACTION_UP)) { // 키패드 다음,확인,완료 버튼을 누른후 띨떼 처리 // (단 EditText의 속성중 android:imeOptions="actionDone" 이 아닐때만 처리) String sPrice = et_price.getText().toString(); Log.d("MyTag", "KEYCODE_ENTER, Price="+sPrice); } break; } return false; } };
'안드로이드 개발 팁' 카테고리의 다른 글
android twitter 연동 1 ( 앱등록및 라이브러리 다운로드) (1) | 2012.05.24 |
---|---|
android facebook 연동 1 (앱등록 및 SDK 다운로드 및 실행) (3) | 2012.05.24 |
android sqlite insert 속도 향상 (0) | 2012.05.22 |
android handle을 이용한 지연처리 (0) | 2012.05.21 |
android 백그라운드 처리 작업 ( handler, AsyncTask ) (0) | 2012.05.09 |