2012-12-13 13 views
8

私は、ユーザーがテキストと顔文字を送信できる単純なチャットアプリケーションを構築しています。私はテキストと顔文字の両方を別の電話に送ることができます。私の問題は、次のとおりです。テキストがEditTextでImageSpanで台無しになっている

1.When私が何かを入力して絵文字を追加します。

enter image description here

は、それから私は、画像の後に右の前に、右の任意のテキストを入力することはできません。私は "o"手紙の前に書くことができます。

enter image description here

たら、2.を:システムは、I型、私は笑顔の後に「ハニー」と入力した場合でも、私はそれを見ることはできませんが、のEditTextがそれを登録し、メッセージが送信されることを「見ます」 Edittextに絵文字を追加してからを削除すると、削除された絵文字が表示されるので、何も入力できません。一度しか表示されないので、入力した文字の数に関係なく、EditTextは、絵文字を削除する直前のように見えますが、3つの場合と同様に、絵文字なしでテキストが送信されます。

3.When私は「いくつかの」の後に絵文字を挿入し、その後のEditTextに「何か」を入力します。

enter image description here

その後、私は顔文字の後にカーソルを置き、残っているもの、ここで、それを削除:

enter image description here

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

(私はのEditTextに追加する絵文字をクリックすると、この方法が有効化された)顔文字のボタンリスナーの内部で何があるかだ

enter image description here

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(); 
    } 
}); 
+0

に修正することでした。 – noxius

+1

はい私はあなたが受け入れられた答えで見たとおりだった – erdomester

答えて

6

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

+0

私は同じ問題を抱えていますが、Spannable.SPAN_EXCLUSIVE_EXCLUSIVEはJelly Beanデバイスの問題を解決しません。 Android 2.2では、期待どおりに動作します。それについての情報はありますか? – fish

+0

残念ながら私はゼリービーンのデバイスを持っていません。 – erdomester

+0

@fish私はゼリービーン(エミュレータ)でテストしましたが、問題はありません。 – BornToCode

0

私は、私は/ etc入力を検証/修正を行う/ /画像を再配置するテキストを設定することができ、そのようにそれのEditTextにtextwatcherを追加して、ユーザーの種類として見てしまいます。

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) { } 
}; 
+0

だから私はこんにちは:) :)/:)スマイリー/ txtカウントは7です。次に私は "ハニー"を入力しますが、それは見えませんが、文字は12に増加しました。これについて何ができますか? – erdomester

+0

申し訳ありません。このサイトではブレッドクラムモードになっています。おそらく、afterTextChanged .... if(s.contains( ":)"))の下で、次にonTextChangedの下でstart、before、およびcountを使用して、 ":)"がどこにあるかを判断してテキスト出力を再構成しますeditText.getText&editText.setText。 – logray

関連する問題