2014-05-14 1 views
2

나는 이모티콘 기능을 사용하고있는 채팅 응용 프로그램을 만들고 있습니다. 내 이모티콘 기능이 단일 이미지에 적합하게 작동하지만 여러 감정적 이미지를 가져 오면 특정 이미지로 변환되지 않습니다 .. 한 번에 하나만 이미지는 내 문제는 내가 편집 텍스트 필드에 스팬 객체를 분리 할 수없는 오전android 어떻게 xmpp에서 edittext에 스팬 개체를 seprate?

  1. 이다, 변환됩니다 ..이 작동하고 있지만, 여러 값의가 작동하지 않는 단일 값 ..

Example.i 여기에서 편집 텍스트 필드에서 4 개의 다른 이미지를 가져 오는 중입니다.

enter image description here

enter image description here 는 지금은 그 스팬 개체를 seprate 싶다. 내가 할 수있는 방법을 여기 은

public void keyClickedIndex(final String index) 
{ 

    ImageGetter imageGetter = new ImageGetter() 
    { 
     public Drawable getDrawable(String source) 
     {  
      StringTokenizer st = new StringTokenizer(index, "."); 
      Drawable d = new BitmapDrawable(getResources(),emoticons[Integer.parseInt(st.nextToken()) - 1]); 
      d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); 
      return d; 
     } 
    }; 


    Spanned cs = Html.fromHtml("<img src ='"+ index +"'/>", imageGetter, null);   
    int cursorPosition = mSendText.getSelectionStart();  
     mSendText.getText().insert(cursorPosition, cs); 

좀 도와주세요 코드입니다 .. 사전에 감사합니다.

+0

별도 사용할 수 있습니까? 너 무슨 뜻이야? – pskink

+0

@pskink seprate 의미, 특정 object.that의 이미지를 알고 싶어요 edittext에서 웃는, 슬픈 또는 무엇이든지 – User11

+0

미안하지만, 당신이 원하는 것을 모른다. – pskink

답변

1

당신은 이모티콘 처리기 메서드

private static class EmoticonHandler implements TextWatcher { 

    private final EditText mEditor; 
    private final ArrayList<ImageSpan> mEmoticonsToRemove = new ArrayList<ImageSpan>(); 
    //public String txt; 
    XMPPClient act; 
    public EmoticonHandler(EditText editor,XMPPClient act) { 
     // Attach the handler to listen for text changes. 
     mEditor = editor; 
     mEditor.addTextChangedListener(this); 
     this.act = act; 
    } 

    public void insert(String emoticon, int resource) 
    { 
     // Create the ImageSpan 
     Drawable drawable = mEditor.getResources().getDrawable(resource); 
     drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); 
     ImageSpan span = new ImageSpan(drawable,emoticon,ImageSpan.ALIGN_BASELINE); 

     // Get the selected text. 
     int start = mEditor.getSelectionStart(); 
     int end = mEditor.getSelectionEnd(); 
     Editable message = mEditor.getEditableText(); 

     // Insert the emoticon. 
     message.replace(start, end, emoticon); 
     message.setSpan(span, start, start + emoticon.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } 

    @Override 
    public void beforeTextChanged(CharSequence text, int start, int count, int after) { 
     // Check if some text will be removed. 
     if (count > 0) { 
      int end = start + count; 
      Editable message = mEditor.getEditableText(); 
      ImageSpan[] list = message.getSpans(start, end, ImageSpan.class); 

      boolean check = false; 

      for (ImageSpan span : list) 
      { 
       // Get only the emoticons that are inside of the changed 
       // region. 

       check = true; 
       int spanStart = message.getSpanStart(span); 
       int spanEnd = message.getSpanEnd(span); 
       //txt = text.toString(); 
       act.emorTxt = text.toString(); 
       if ((spanStart < end) && (spanEnd > start)) { 
        // Add to remove list 
        mEmoticonsToRemove.add(span); 
       } 
      } 

      if(!check) 
      { 
       act.emorTxt = text.toString(); 
      } 
     } 
    } 

    @Override 
    public void afterTextChanged(Editable text) { 
     Editable message = mEditor.getEditableText(); 

     // Commit the emoticons to be removed. 
     for (ImageSpan span : mEmoticonsToRemove) 
     { 
      int start = message.getSpanStart(span); 
      int end = message.getSpanEnd(span); 

      // Remove the span 
      message.removeSpan(span); 

      // Remove the remaining emoticon text. 
      if (start != end) { 
       message.delete(start, end); 
      } 
     } 
     mEmoticonsToRemove.clear(); 


    } 

    @Override 
    public void onTextChanged(CharSequence text, int start, int before, int count) { 
    } 

} 

가 완벽하게 작동합니다 .... :)

관련 문제