0

我在我的操作栏中添加了一个自定义 ActionView,它旨在允许用户通过输入数字来查找内容。但是,即使我指定了数字的 imeType,我用于布局的 EditText 总是会显示一个完整的字母数字键盘。我不想要字母数字键盘。哎呀,我什至不想要 +/- 类型选项。只有0-9和“完成”。如何让我的 EditText 使用自定义键盘进行搜索?有没有办法做一个下拉键盘?我希望仅为该字段编写自定义 IME,但似乎不允许这样做。

菜单的 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末尾的注释掉的代码是试图强制键盘立即显示,但这会导致一些奇怪的行为——弹出非数字键盘。

4

1 回答 1

1

我意识到这是华硕键盘的默认输入问题

是的,Transformer Prime 在这个问题上似乎有些破绽。话虽如此,请记住,没有 IME 一定会尊重任何给定inputType的 . 例如,Graffiti IME 都是基于笔的,因此可能没有“数字”与“文本”的真正概念。inputType是请求,不是合同。

我可以强制换成不同的输入法吗

不,如果可能的话,这具有一些令人讨厌的恶意软件潜力。

有没有一种聪明的方法可以让 actionView 在操作栏中有编辑文本,在下拉菜单/底部有自定义键盘

欢迎您在EditText获得焦点时获得控制权(setOnFocusChangeListener()ListPopupWindow

于 2012-03-29T20:49:56.453 回答