Xamarin Android EditText输入密钥

时间:2013-04-18 18:05:34

标签: android key keypress xamarin enter

我几周前开始使用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 键。

谢谢!

5 个答案:

答案 0 :(得分:13)

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

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" />

答案 1 :(得分: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;
}

答案 2 :(得分: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;
        }
    };

答案 3 :(得分:0)

更好的是为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;
            }
        };
    }
}

答案 4 :(得分:0)

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