2012-03-29 2 views
0

내 Actionbar에 사용자 정의 ActionView를 추가했습니다. 사용자가 숫자를 입력하여 뭔가를 볼 수 있도록하기위한 것입니다. 그러나 레이아웃에 사용 된 EditText는 숫자의 imeType을 지정 했더라도 항상 전체 영숫자 키보드를 표시합니다. 나는 영숫자 키보드를 원하지 않는다. 젠장, 나는 +/- 유형 옵션조차 원하지 않아. 단지 0-9와 "완료." 검색을위한 내 EditText에서 어떻게 사용자 정의 키패드를 사용할 수 있습니까? 드롭 다운 키보드를 사용하는 방법이 있습니까? 해당 필드에 대해서만 사용자 지정 IME를 작성하려고했으나 허용되지 않습니다. 메뉴Android : 작업 모음의 접을 수있는 작업보기 용 맞춤 키패드?

XML : 작업 표시 줄 메뉴를 설정하는

<EditText xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/keypad_actionview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textColor="@color/White" 
     android:drawableLeft="@drawable/icon_channel_keypad" 
     android:drawablePadding="5dp" 
     android:inputType="number" 
     android:imeOptions="flagNoExtractUi" 
     /> 

자바 : 액션 레이아웃

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/menu_keypad" 
     android:icon="@drawable/ms_btn_keypad_sel" 
     android:title="Keypad" 
     android:showAsAction="ifRoom|collapseActionView" 
     android:actionLayout="@layout/keypad_actionview"/> 
</menu> 

XML은

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.number_menu, menu); 
    keypadMenuItem = menu.findItem(R.id.menu_keypad); 
    final EditText keypadText = (EditText) keypadMenuItem.getActionView(); 
    keypadText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(final TextView textView, final int i, final KeyEvent keyEvent) { 
      keypadMenuItem.collapseActionView(); 
      changeDisplayedNumber(Integer.valueOf(textView.getText().toString()), true); 
      textView.setText(""); 
      return true; 
     } 
    }); 
    keypadMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      startAutoHidePlayerControlsRunner(); 
      return true; // Return true to collapse action view 
     } 

     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      stopAutoHidePlayerControlsRunner(); 
      keypadText.setText(""); 
      keypadText.requestFocus(); 
      /*keypadText.setInputType(InputType.TYPE_CLASS_NUMBER); 
      InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); 
      if (inputMethodManager != null) { 
       inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); 
      }*/ 
      return true; // Return true to expand action view 
     } 
    }); 

    return true; 
} 

는 마지막에 코드를 주석 자바의 키보드를 바로 표시하도록 강요했지만, 그게 이상한 행동을 일으켰습니다. - 숫자 키보드가 나타납니다.

+0

당신의'ExitText' (레이아웃 파일과 어떻게 액션 바에 추가하는지). – CommonsWare

+0

내 메뉴 XML, actionView 용 레이아웃 및 내 onCreateOptions 용 Java를 추가했습니다. – Calvin

+0

작업 표시 줄에'EditText'가있는 곳에서'inputType = "number"'를 사용하여 샘플 중 하나를 수정했습니다 (참고 : 광산은 접을 수 없음). XOOM에서는 제대로 작동했습니다. Transformer Prime에는 QWERTY 키보드가 있습니다. 4.0.3 에뮬레이터에서 제대로 작동했습니다. 그래서 ... 너 시험 할거야? – CommonsWare

답변

1

나는 그것이

예, 변압기 프라임 어느 정도이 문제에 깨진 것 같다 아수스 키보드와 기본 입력 문제가 있다는 것을 깨닫는다. 즉, 어떤 주어진 IMF도 반드시 inputType을 기리는 것이 아니라는 것을 명심하십시오. 예를 들어, Graffiti IME는 모두 펜 기반이므로 "숫자"대 "텍스트"에 대한 실제 개념이 없을 것입니다. inputType은 계약이 아니라 요청입니다.

는 I 강제 다른 입력 방법이 가능한한다면 성가신 악성 가능성이있다

제를 교환 할 수있다.

는 actionView 바닥

당신은 EditText가 졌을 경우에 제어를 얻을 환영의 작업 표시 줄의 글고 치기와 드롭 다운에서 사용자 지정 키보드 /이 만들 수있는 영리한 방법이있다 포커스 (setOnFocusChangeListener())를 누른 다음 이전에 사라진 활동중인 맞춤형 키보드를 보이게하거나 숫자 키패드를 해킹 한 ListPopupWindow을 표시하거나 다음 중 하나를 수행하십시오.

+0

ListPopupWindow가 반드시 목록을 포함 할 필요는 없다고 가정합니다. 나는 List라는 단어 때문에 그런 생각을 사용하지 않았다. 알았어 - 입력 해 주셔서 감사합니다! – Calvin

+0

@Calvin : 아니요, ListView가 있어야합니다. 하지만 ListView 행에 버튼을 넣을 수는 있습니다. 드롭 다운을 원했고 드롭 다운이었습니다 ... – CommonsWare