3

Mono for Android の EditText コントロールで非常に奇妙な問題が発生しています。私のソリューションは 2.3 を対象としており、T Mobile VivaCity でデバッグしています。EditText の AXML は次のとおりです。

<EditText
    android:inputType="text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/ctl_searchText" />

EditText を含むビューを表示すると、キーボードが自動的に表示されますが、これは問題ではありません。問題は、キーボードの数字をタップしても数字を入力できないことです。テキスト フィールドに数字を表示するには、キーを押したままコンテキスト メニューから数字を選択する必要があります。この方法を使用して番号を入力すると、それを削除することはできません。私はあらゆる種類の入力方法を試しましたが、SO で同様の問題を探しても無駄でした。これはデバイスの問題のように聞こえますか? または、コード/AXML で行っていない明白な何かがありますか?

==編集==

問題を絞り込んだと思います。これは、EditText で使用される KeyPress イベント ハンドラと関係があります。EditText は検索フィールドを表すため、属性 android:singleLine="true" を追加して、リターン キーが余分な行を追加するのを止め、代わりに「完了」と言いました。コントロールに KeyPress イベント ハンドラーを追加すると、数値の入力ができなくなりますが、ハンドラーがないと、正常に機能し始めます。ここに私が持っているものがあります:

<EditText
    android:id="@+id/ctl_searchText"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:singleLine="true" />
EditText ctl_searchText = FindViewById<EditText>(Resource.Id.ctl_searchText);

ctl_searchText.KeyPress += (object sender, View.KeyEventArgs e) => 
{
    if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter)
    {
        Toast.MakeText (this, ctl_searchText.Text, ToastLength.Short).Show ();
        e.Handled = true;
    }
};

このコードでは、テキスト フィールドに数字を入力することはできませんが、文字を入力することはできます。イベント ハンドラーを削除すると、再び機能し、すべての文字を入力できるようになります。調査を続けますが、これは非常に奇妙です。

4

2 に答える 2

2

e.Handled = false; という else を追加してみてください。

コードは次のようになります。

ctl_searchText.KeyPress += (object sender, View.KeyEventArgs e) => 
{
    if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter)
    {
        Toast.MakeText (this, ctl_searchText.Text, ToastLength.Short).Show ();
        e.Handled = true;
    }
    else
    { 
        e.Handled = false;
    }
};
于 2015-09-17T14:11:32.320 に答える