Xamarin Android EditText 回车键

16

我在一周前开始使用Xamarin Studio工作,但是遇到了一个问题:我创建了一个edittext,其中包含序列号。 我想在按下Enter后运行一个函数。 当我按下Enter时,函数可以正常运行,但我无法修改edittext的内容(无法在其中输入)。

代码:

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键。

谢谢!

6个回答

19

最佳方法是使用 EditorAction 事件,该事件旨在在按下 Enter 键时触发。代码应如下:

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

要更改Enter按钮的文本,可以在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" />

如何在输入完成后隐藏键盘? - aronccs

5
当按下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;
}

3

试一下这个:



    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;
        }
    };


1
更好的做法是创建可重用的扩展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;
            }
        };
    }
}

0

Android EditText组件必须处于焦点状态。您可以使用以下代码强制使其获取焦点:

editText.RequestFocus();

-1
 editText.KeyPress += (object sender, View.KeyEventArgs e) =>
            {
                    if ((e.KeyCode == Keycode.Enter))
                    {
                       // `enter code here`
                    }
            };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接