我正在尝试制作一个平板电脑应用程序,其中有几个edittext字段设置为InputType =“number”,因此它看起来像一个小键盘而不是整个键盘。这显然是因为我只想在场上输入数字。
但是,我想检测用户是否点击了ENTER键。如果他们这样做,我想关闭软键盘 - 所以它比点击那个小的向下箭头按钮隐藏键盘更容易和更容易访问。我已经为屏幕上另一个接受所有字符(使用默认键盘)的edittext框做了这个确切的事情,并且工作正常。但出于某种原因,当我尝试从数字键盘上检测到按键时,我无法这样做。
所以这是我似乎无法弄清楚的问题:当我向键盘添加一个监听器时,NOTHING有效。屏幕上似乎没有数字出现。如果我删除了监听器,那个小键盘再次正常工作但是我无法听到按下的回车键,所以我可以关闭软键盘。
所以,这就是我得到的:
<EditText
android:id="@+id/NumOfAdults_EditText"
android:layout_width="70sp"
android:layout_height="50sp"
android:inputType="number"
android:textSize="20sp"
android:textStyle="bold"
android:gravity="center"
android:selectAllOnFocus="true"
/>
我这样听:
var editTextBox = FindViewById<EditText>(Resource.Id.NumOfAdults_EditText);
editTextBox.KeyPress += (intentSender, e) =>
{
if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter)
{
CloseSoftKeyboard();
e.Handled = true;
}
};
所以有人知道为什么当我这样做时,数字输入键STOP工作?当inputType未设置为number或phone时,此代码完全正常。有趣的是,如果我在检测中添加一个Make.Toast,我实际上可以看到按键工作(甚至可以显示Num0-9)但是屏幕上似乎没有任何效果。
答案 0 :(得分:0)
您可以覆盖活动的 DispatchKeyEvent 方法,并输入一些这样的代码。尽管如此,它会被调用所有按钮,因此尽量使其具有限制性。
在此示例中,将 etTheIdOfYourEditTextControl 替换为您希望发生此行为的字段的实际名称。
public override bool DispatchKeyEvent(KeyEvent e)
{
if (this.CurrentFocus.Id == Resource.Id.etTheIdOfYourEditTextControl && (e.KeyCode == Keycode.NumpadEnter || e.KeyCode == Keycode.Enter))
{
InputMethodManager imm = GetSystemService(Context.InputMethodService) as InputMethodManager;
if (imm != null)
imm.HideSoftInputFromWindow(this.CurrentFocus.WindowToken, 0);
return true;
}
return base.DispatchKeyEvent(e);
}
答案 1 :(得分:0)
已经很长时间了,但是仍然显示解决方案:
if (...) // Handle some key
{
...
}
else if (...) // Handle another key
{
...
}
else
{
e.Handled = false; // if you want that character appeared on the screen
}