2012-03-29 81 views
0

我已經添加了一個自定義的ActionView到我的動作欄,它的目的是讓用戶通過輸入一個數字來查找某些東西。然而,即使我指定了數字的imeType,用於佈局的EditText總是會顯示一個完整的字母數字鍵盤。我不想要一個字母數字鍵盤。哎呀,我甚至不想要+/-類型的選項。只有0-9而且是「完成」。如何讓我的EditText用於搜索使用自定義鍵盤?有沒有辦法做一個下拉式鍵盤?我希望爲該字段編寫自定義IME,但似乎不允許。Android:操作欄中可摺疊操作視圖的自定義鍵盤?

XML的菜單:

<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行動佈局:

<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" 
     /> 

Java進行設置操作欄菜單:

@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; 
} 

末的註釋掉的代碼的java是試圖強制鍵盤立即顯示,但是這導致了一些奇怪的行爲 - 非 - 數字鍵盤彈出。

+0

發佈您正在使用的代碼你的'ExitText'(佈局文件以及你如何將它添加到操作欄中)。 – CommonsWare 2012-03-29 20:15:08

+0

我已經添加了我的菜單XML,actionView的佈局,以及我的onCreateOptions的java。 – Calvin 2012-03-29 20:26:25

+0

我修改了其中一個樣本,在操作欄中有一個'EditText',使用'inputType =「number」'(注意:我的不可摺疊)。在XOOM上,它工作正常。在Transformer Prime上,我得到了QWERTY鍵盤。在4.0.3模擬器上,它工作正常。那麼......你在測試什麼? – CommonsWare 2012-03-29 20:41:08

回答

1

我意識到這是,這是一個默認的輸入問題與華碩鍵盤

是的,Transformer Prime上,似乎在這個問題上有所打破。話雖如此,請記住,任何輸入法都不一定會兌現任何給定的inputType。例如,塗鴉IME都是基於筆的,因此可能沒有真正的「數字」與「文本」的概念。 inputType是一個請求,而不是合同。

我可以強行在不同的輸入法換這已如果有可能一些討厭的惡意軟件的潛在

號。

是有一個聰明的辦法,使的actionView在操作欄中的EditText和一個自定義鍵盤在下拉/底部

歡迎您得到控制時EditText得到重點(setOnFocusChangeListener())然後執行某些操作,例如顯示您迄今爲止已停用的活動中的自定義鍵盤,或顯示您已入侵數字小鍵盤的ListPopupWindow,或者...

+0

我假設ListPopupWindow不一定需要包含一個列表?由於單詞列表,我沒有想過要使用它。好的 - 感謝您的輸入! – Calvin 2012-03-29 20:52:02

+0

@Calvin:不,它必須有一個ListView。不過,您可以將按鈕放置在「ListView」行中。你想要一個下拉菜單,這是一個下拉菜單... – CommonsWare 2012-03-29 20:56:36