私は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 キー。
ありがとう!
最善のアプローチは、でトリガーされるように設計された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" />
押されたキーが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;
}
};
editText.KeyPress += (object sender, View.KeyEventArgs e) =>
{
if ((e.KeyCode == Keycode.Enter))
{
// `enter code here`
}
};
さらに良いのは、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;
}
};
}
}