Xamarin Android EditTextinput密钥

我几个星期前开始与Xamarin Studio合作,并且找不到解决下一个问题的办法:创build一个包含序列号的编辑文本。 按下Enter后,我想运行一个函数。 它工作正常,当我按下Enter时 ,函数运行没有失败,但我不能修改edittext的内容(我不能input)。

代码:

EditText edittext_vonalkod = FindViewById<EditText>(Resource.Id.editText_vonalkod); edittext_vonalkod.KeyPress += (object sender, View.KeyEventArgs e) => { if ((e.Event.Action == KeyEventActions.Down) && (e.KeyCode == Keycode.Enter)) { //Here is the function } }; 

这是控制的代码:

 <EditText p1:layout_width="wrap_content" p1:layout_height="wrap_content" p1:layout_below="@+id/editText_dolgozo_neve" p1:id="@+id/editText_vonalkod" p1:layout_alignLeft="@+id/editText_dolgozo_neve" p1:hint="Vonalkód" p1:text="1032080293" p1:layout_toLeftOf="@+id/editText_allapot" /> 

我试着用edittext_vonalkod.TextCanged的参数,保留这个问题。 我可以修改内容但不能处理Enter键。

谢谢!

Solutions Collecting From Web of "Xamarin Android EditTextinput密钥"

最好的方法是使用devise为在Enter键按下时触发的EditorAction事件。 这将是一个这样的代码:

 edittext_vonalkod.EditorAction += (sender, e) => { if (e.ActionId == ImeAction.Done) { btnLogin.PerformClick(); } else { e.Handled = false; } }; 

为了能够更改inputbutton的文本, imeOptions在您的XML上使用imeOptions

 <EditText p1:layout_width="wrap_content" p1:layout_height="wrap_content" p1:layout_below="@+id/editText_dolgozo_neve" p1:id="@+id/editText_vonalkod" p1:layout_alignLeft="@+id/editText_dolgozo_neve" p1:hint="Vonalkód" p1:text="1032080293" p1:layout_toLeftOf="@+id/editText_allapot" p1:imeOptions="actionSend" /> 

当按下Enter键时,您需要将事件标记为不处理。 将下面的代码放入您的KeyPress处理程序中。

 if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter) { // Code executed when the enter key is pressed down } else { e.Handled = false; } 

尝试这个:

 editText = FindViewById(Resource.Id.editText); editText.KeyPress += (object sender, View.KeyEventArgs e) => { e.Handled = false; if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter) { //your logic here e.Handled = true; } }; 

更好的是创buildEditText(EditTextExtensions.cs)的可重用扩展:

 public static class EditTextExtensions { public static void SetKeyboardDoneActionToButton(this EditText editText, Button button) { editText.EditorAction += (sender, e) => { if (e.ActionId == ImeAction.Done) { button.PerformClick(); } else { e.Handled = false; } }; } }