4

EditTextを拡張してカスタムを作成しましたandroid.widget.EditText

EditTextがフォーカスされている場合にのみ、オートコレクトスパンを表示したいと思います。setInputType(INPUT_NO_FOCUS);だから私はコンストラクターを呼び出して:

@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
    super.onFocusChanged(focused, direction, previouslyFocusedRect);
    if (focused) {
        setInputType(INPUT_FOCUS);
    } else {
        setInputType(INPUT_NO_FOCUS);
    }
}

と:

private final int INPUT_NO_FOCUS = TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE
        | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
private final int INPUT_FOCUS = TYPE_CLASS_TEXT | TYPE_TEXT_FLAG_MULTI_LINE
        | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT | InputType.TYPE_TEXT_FLAG_AUTO_COMPLET;

==>オートコレクトとオートコンプリートはありませんが、をクリックしても表示されませんEditText。入力タイプが正常に変更されました。

オートコレクトをトリガー/オートコンプリートを追加するにはどうすればよいですか?

//編集:

アーカイブしたいユースケース:

  1. MyEditText extends EditTextビューが表示され、フォーカスされていません。テキストにスペルチェックはありません(->テキストの下に赤いスパン/行はありません)

  2. ユーザーが編集フィールドをクリックして。->スペルチェックがトリガーされます->赤い線が表示されます(ユーザーは間違ったスペルの単語をクリックして、OSに修正させることができます)

  3. ユーザーが別のビュー要素をクリックすると、赤い線/スパンが消えます。

4

2 に答える 2

2

これを行う良い方法はありません。問題は、Android フレームワークには、入力タイプが変更されたときにキーボードに通知するメカニズムが実際にはないことです。キーボードは通常、フィールドが開くときにタイプをチェックします。その後、型が変わってもポーリングしないとわからないし、既存のキーボードでそんなことはないと思う。

于 2013-03-15T16:07:35.290 に答える
0

MyEditText クラスでこのメソッドをオーバーライドします

@Override
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
        super.onTextChanged(text, start, lengthBefore, lengthAfter);
        setInputType(INPUT_FOCUS);
    }

このメソッドを使用すると、EditText の inputType を INPUT_FOCUS に変更して、ユーザーが MyEditText のテキストを編集するときにテキストの下に赤い線を表示できます。

于 2013-03-16T08:56:43.693 に答える