2012-03-29 79 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