web-dev-qa-db-ja.com

Xamarin Android EditTextエンターキー

私は1週間前にXamarinStudioで作業を開始しましたが、次の問題の解決策を見つけることができませんでした。シリアル番号を含む編集テキストを作成しました。後に関数を実行したいのですが Enter 押されました。押すと正常に動作しています Enter、関数は失敗せずに実行されますが、編集テキストの内容を変更できません(入力できません)。

コード:

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 キー。

ありがとう!

14
user2296281

最善のアプローチは、でトリガーされるように設計された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" />
15

押されたキーが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;
}
5
Bruno

これを試して:



    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
Alfred Roa
 editText.KeyPress += (object sender, View.KeyEventArgs e) =>
            {
                    if ((e.KeyCode == Keycode.Enter))
                    {
                       // `enter code here`
                    }
            };
0
tirozh

さらに良いのは、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
Sunkas