2012-12-13 5 views
8

사용자가 텍스트와 이모티콘을 보낼 수있는 간단한 채팅 앱을 만들고 있습니다. 텍스트와 이모티콘을 다른 휴대 전화로 보낼 수 있습니다. 내 문제는 다음과 같습니다EditText에서 ImageSpan으로 텍스트가 엉망입니다.

1.When 내가 뭔가를 입력하고 이모티콘을 추가

enter image description here

은 그 때 나는 이미지 후 직전 오른쪽 텍스트를 입력 할 수 없습니다. "o"편지 앞에 쓸 수 있습니다. 이 시스템은, 내가 그것을 볼 수 없습니다 내가 웃는 후 "허니"를 입력 그래서 경우에도 입력 한 것을 "본다"하지만 글고 그것을 등록하고 메시지가 전송됩니다

enter image description here

할수 있도록 팝업 Edittext에 이모티콘을 추가 한 다음을 삭제하면 삭제 된 이모티콘이 나타나기 때문에 아무 것도 입력 할 수 없습니다. 한 번만 나타나므로 입력 한 문자 수에 관계없이 EditText는 이모티콘을 삭제하기 직전처럼 보이지만 세 가지 경우와 마찬가지로 이모티콘없이 텍스트가 전송됩니다.

3.When 내가 다음 "일부"이후에 이모티콘을 삽입 글고에서 "뭔가"를 입력 :

enter image description here

그럼 난 이모티콘 후 커서를 놓고 삭제, 여기에 무슨 일이 남아 :

enter image description here

하지만 보내기 버튼을 누를 때 올바른 메시지가 전송됩니다 :

(필자는 글고 치기에 추가 이모티콘을 클릭 할 때이 방법은 활성화) 이모티콘의 버튼 리스너 내부의 무엇

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'는 제 젤리 장치에서 문제를 해결하지 못합니다. Android 2.2에서 예상대로 작동합니다. 그것에 관한 정보가 있습니까? – fish

+0

불행히도 저는 젤리 빈 장치를 가지고 있지 않습니다. – erdomester

+0

@fish 젤리 빈 (에뮬레이터)에서 테스트했는데 아무런 문제가 없습니다. – BornToCode

0

난 등/입력을 확인/수정을// 이미지의 위치를 ​​텍스트를 설정할 수 있습니다 그런 식으로 그 글고 치기에 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

관련 문제