我在操作栏中添加了一个自定义ActionView,它允许用户通过输入数字来查找内容。然而,我用于布局的EditText总是显示一个完整的字母数字键盘,即使我指定了数字的imeType。我不想要字母数字键盘。见鬼,我甚至不想要+/-类型的选项。只有0-9和一个"完成"。如何使用自定义键盘让我的EditText用于搜索?有没有办法制作下拉键盘?我希望只为该字段编写一个自定义输入法,但这似乎是不允许的。
菜单的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末尾注释掉的代码试图强制键盘立即显示,但这导致了一些奇怪的行为——非数字键盘弹出。
我意识到这是华硕键盘的默认输入问题
是的,Transformer Prime在这个问题上似乎有些崩溃。话虽如此,请记住,任何IME都不一定会尊重任何给定的inputType
。例如,涂鸦输入法都是基于笔的,因此可能没有"数字"与"文本"的真正概念。inputType
是一个请求,而不是一个合同。
我能强制换一种不同的输入法吗
没有。如果可能的话,这有一些令人讨厌的恶意软件的潜力。
有没有一种聪明的方法可以让actionView在操作栏中有edittext,在底部的下拉列表中有一个自定义键盘
欢迎您在EditText
获得焦点(setOnFocusChangeListener()
)时进行控制,然后做一些事情,比如让您的活动中自定义键盘可见,或者显示您破解到数字键盘中的ListPopupWindow
,或者。。。