I’ve added a custom ActionView to my action bar, and it’s meant to allow users to look something up by entering a number. However, the EditText I used for the layout always brings up a full alphanumeric keyboard even though I specified imeType of number. I don’t want an alphanumeric keyboard. Heck, I don’t even want the +/- type options. Just 0-9 and a “Done.” How can I have my EditText for the search use a custom keypad? Is there a way to do a dropdown keyboard? I was hoping to write a custom IME just for that field, but it appears that is not permitted.
XML for menu:
<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 for action layout:
<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 for setting up the action bar menu:
@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;
}
The commented out code at the end of the java was to try and force the keyboard to display right away, but that was causing some strange behavior – non-numeric keyboards popping up.
Yes, the Transformer Prime seems to be somewhat broken on this issue. That being said, bear in mind that no IME will necessarily honor any given
inputType. For example, the Graffiti IME is all pen-based and therefore probably has no real notion of “number” vs. “text”.inputTypeis a request, not a contract.No. That has some nasty malware potential if it were possible.
You are welcome to get control when the
EditTextgets the focus (setOnFocusChangeListener()) and then do something, like make visible your in-activity custom keyboard that heretofore had been gone, or display aListPopupWindowthat you hack into a numeric keypad, or…