Reputation: 171
I started to work with Xamarin Studio a weeks ago, and could not find solution to the next problem: created an edittext which will contains serial numbers. I'd like ro run a function after the Enter was pressed. It's working fine, when I press Enter, the function runs without failure, but I can not modify the content of the edittext (I can't type into it).
The code:
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
}
};
This is the code of the control:
<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" />
I tried to use edittext_vonalkod.TextCanged
with its arguments, the problem reserved. I can modify the content but can not handle Enter key.
Thanks!
Upvotes: 17
Views: 22624
Reputation: 1
The Android EditText component must be focused. You can force it with:
editText.RequestFocus();
Upvotes: 0
Reputation: 1
editText.KeyPress += (object sender, View.KeyEventArgs e) =>
{
if ((e.KeyCode == Keycode.Enter))
{
// `enter code here`
}
};
Upvotes: -1
Reputation: 9600
Even better is to create reusable extension to EditText (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;
}
};
}
}
Upvotes: 1
Reputation: 283
try this:
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;
}
};
Upvotes: 3
Reputation: 5969
The best approach would be to use the EditorAction
event that is designed to be triggered on the Enter key press. It would be a code like this:
edittext_vonalkod.EditorAction += (sender, e) => {
if (e.ActionId == ImeAction.Done)
{
btnLogin.PerformClick();
}
else
{
e.Handled = false;
}
};
And to be able to change the text of the Enter button use imeOptions
on your XML:
<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" />
Upvotes: 19
Reputation: 894
You need to mark the event as not being handled when the pressed key is ENTER. Place the following code inside your KeyPress handler.
if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter)
{
// Code executed when the enter key is pressed down
}
else
{
e.Handled = false;
}
Upvotes: 6