1

編集で書かれたテキストを絵文字に動的に変更するにはどうすればよいですか...

    Editest.addTextChangedListener(new TextWatcher() {

        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        public void afterTextChanged(Editable s) {


        }
    });
4

2 に答える 2

2

そうするためのヒント:

あなたができるかもしれないことは、EditFieldsとBitmapFieldsのコンテナであるカスタムマネージャを作成することです。ユーザーがマネージャー内にある最初のEditFieldをクリックして入力を開始したら、絵文字が必要になるまで入力させます。彼らがそれを選択したら、EditFieldの直後にBitmapFieldを作成し、BitmapFieldの右側に新しいEditFieldを配置します。ユーザーがバックスペースを押してEditFieldを空にしたとき、それを削除する必要があります。その後、ユーザーはBitmapFieldを選択し、後続のバックスペースはBitmapFieldを削除して、前のEditFieldにフォーカスを置きます。

サイズを制御できる独自のEditFieldと、バックスペースで削除できるBitmapFieldも作成する必要があります。

私が先に考える限り、これを5.0で使用しても問題はないはずです。

コメント用に編集:

あなたはあなたが取るどんなアプローチでもあなたのマネージャーのあなた自身のsublayout()を実装しなければならないでしょう、それであなたは彼らをそこに置いた人なのであなたはポジションを知っています。複数行を実行したい場合(私のアプローチは単一行でした)、次の3つのいずれかを実行できます。

  1. 各行に新しいEditFieldを用意し、バックスペースが前のフィールド(この場合は最後の行)にドロップする場所について説明したのと同じ方法でリンクを実行します。フィールドがテキストに基づいている大きさの測定値を保持し、それが次の行に移動するかどうかを確認する必要があります。EditFieldsが配置されている場所を調整するだけの場合。

  2. 高さを拡張する独自のEditFieldを実装することで、複数行フィールドに画像を配置できます。この場合、テキストがどこにあり、どの行にあるかがわかります。ビットマップの描画は、(あなたがどの行番号であるか)*(フォントの高さ)とgetAdvance(text_up_to_bitmap)を計算することです。

  3. すべての描画を手動で行うフォーカス可能なマネージャーがある独自のEditFieldを実装します。キーストロークのキャプチャから保存した文字列を解析し、絵文字があるべき場所にフラグを付けることができます。その前にテキストを描画し、絵文字を描画してから、テキストの描画を続行します。これの難しさは、カーソルがどこにあるべきかを決定すること、仮想キーボードを立ち上げること、そしてEditFieldがあなたのために行う他のいくつかのタスクを処理することのようなことをしなければならないことです。

于 2011-06-06T10:00:39.720 に答える
1

正規表現を使用して、文字列 ":)" のテキストをスキャンし、それをsmileyに置き換えることができます。

あなたのアプリが正確に何をしているのかわからないので、文字が入力されるたびに起動する TextWatcher を使用するのが良い考えかどうかはわかりません。おそらく、OK ボタンを押すなどの特定のイベントの後で、または TextView がフォーカスを失ったときに置換を行う方が良いかもしれません。

于 2011-06-06T09:06:20.677 に答える