Question

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.

Was it helpful?

Solution

I realize it's that it's a default input issue with the Asus keyboard

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". inputType is a request, not a contract.

can I forcibly swap in a different input method

No. That has some nasty malware potential if it were possible.

is there a clever way to make the actionView have the edittext in the action bar and a custom keyboard in a dropdown/at the bottom

You are welcome to get control when the EditText gets the focus (setOnFocusChangeListener()) and then do something, like make visible your in-activity custom keyboard that heretofore had been gone, or display a ListPopupWindow that you hack into a numeric keypad, or...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top