8

ユーザーがテキストや絵文字を送信できるシンプルなチャットアプリを作成しています。テキストと絵文字の両方を別の電話に送信できます。私の問題は次のとおりです。

1.何かを入力して絵文字を追加する場合:

ここに画像の説明を入力してください

その場合、画像の直前と直後にテキストを入力できません。「o」の文字の前に書くことができます。システムは入力した内容を「認識」するため、スマイリーの後に「Honey」と入力しても表示されませんが、EditTextがそれを登録し、メッセージが送信されます。

ここに画像の説明を入力してください

2. Edittextに絵文字だけを追加して削除すると、削除された絵文字が表示されるため、何も入力できません。表示されるのは1回だけなので、入力した文字数に関係なく、EditTextは絵文字を削除する直前のように見えますが、3つの場合と同様に、テキストは絵文字なしで送信されます。

3. EditTextに「something」と入力し、「some」の後に絵文字を挿入します。

ここに画像の説明を入力してください

次に、絵文字の後にカーソルを置いて削除します。残っているものは次のとおりです。

ここに画像の説明を入力してください

しかし、送信ボタンを押すと、正しいメッセージが送信されます。

ここに画像の説明を入力してください

これが絵文字のボタンリスナーの内部にあります(このメソッドは、絵文字をクリックしてEditTextに追加するとアクティブになります)。

ib_happy.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        int cursorPosition = mOutEditText.getSelectionStart();
            mOutEditText.getText().insert(cursorPosition, smileys[0]);
        SpannableStringBuilder ssb = new SpannableStringBuilder(mOutEditText.getText());
        ssb.setSpan(new ImageSpan(bitmapArray.get(0), ImageSpan.ALIGN_BASELINE), cursorPosition,  cursorPosition+2, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        mOutEditText.setText(ssb, BufferType.SPANNABLE);
            mOutEditText.setSelection(cursorPosition+2);
        dialog_emoticon.dismiss();
    }
});
4

2 に答える 2

6

解決策を見つけました。私がしなければならなかったのは Spannable.SPAN_INCLUSIVE_INCLUSIVESpannable.SPAN_EXCLUSIVE_EXCLUSIVE

于 2012-12-14T16:22:30.143 に答える
0

そのエディットテキストにテキストウォッチャーを追加し、ユーザーが入力するのを監視します。そうすれば、画像の再配置/テキストの設定/修正/入力の検証などを行うことができます。

editText.addTextChangedListener(textWatcher);

textWatcher = new TextWatcher() {
    public void afterTextChanged(Editable s) {
        //editText.doStuffHere
        //reposition your image/etc.
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
    public void onTextChanged(CharSequence s, int start, int before, int count) { }
};
于 2012-12-13T20:40:26.633 に答える