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