我在Mono for Android中使用EditText控件遇到了一些非常奇怪的问题。我的解决方案是针对2.3而我正在调试T Mobile VivaCity。这是我的EditText的AXML
<EditText
android:inputType="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/ctl_searchText" />
当我显示包含EditText的视图时,键盘会自动出现,这不是问题。问题是我无法通过点击键盘上的数字输入任何数字,唯一可以在文本字段中显示数字的方法是,如果我按住键并从上下文菜单中选择数字。虽然一旦我使用这种方法输入了一个数字,我就无法将其删除。我已经尝试了各种输入方法,并在SO中寻找类似的问题无济于事。这听起来像是设备的问题吗?或者有没有明显的东西,我没有在代码/ AXML中做什么?
==编辑==
我认为我已经缩小了问题范围,它与EditText上使用的KeyPress事件处理程序有关。由于EditText表示搜索字段,我添加了属性android:singleLine =“true”以停止返回键添加额外的行,而是说“完成”。当我向控件添加一个KeyPress事件处理程序时,这就是它阻止我输入数字,但没有处理程序它再次开始正常运行。这就是我所拥有的:
<EditText
android:id="@+id/ctl_searchText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true" />
EditText ctl_searchText = FindViewById<EditText>(Resource.Id.ctl_searchText);
ctl_searchText.KeyPress += (object sender, View.KeyEventArgs e) =>
{
if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter)
{
Toast.MakeText (this, ctl_searchText.Text, ToastLength.Short).Show ();
e.Handled = true;
}
};
使用此代码我无法在文本字段中输入数字,但我可以输入字母。当我删除事件处理程序时,它再次起作用,允许我输入所有字符。我要继续调查,这很奇怪。
答案 0 :(得分:5)
请小心你没有使用OnKeyListener。如果是,则检查onKey(View v,int keyCode,KeyEvent event)方法如果侦听器已使用该事件则返回True,否则返回false。在你的情况下,它是这样的:
ctl_searchText.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event){
if (keyCode == KeyEvent.KEYCODE_ENTER){
//do smth
return true;
}
return fasle;
}
});
答案 1 :(得分:2)
尝试添加一个说明e.Handled = false的其他内容;
您的代码将如下所示:
ctl_searchText.KeyPress += (object sender, View.KeyEventArgs e) =>
{
if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter)
{
Toast.MakeText (this, ctl_searchText.Text, ToastLength.Short).Show ();
e.Handled = true;
}
else
{
e.Handled = false;
}
};