2013-02-04 57 views
5
final SpannableStringBuilder sb = new SpannableStringBuilder(); 
TextView tv = createContactTextView(contactName); 
BitmapDrawable bd = (BitmapDrawable) convertViewToDrawable(tv); 
bd.setBounds(0, 0, bd.getIntrinsicWidth(),bd.getIntrinsicHeight()); 

sb.append(contactName + ","); 
sb.setSpan(new ImageSpan(bd), sb.length()-(contactName.length()+1), sb.length()-   1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
to_input.setText(sb); 

public static Object convertViewToDrawable(View view) { 
    int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); 
    view.measure(spec, spec); 
    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); 
    Bitmap b = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), 
     Bitmap.Config.ARGB_8888); 
    Canvas c = new Canvas(b); 
    c.translate(-view.getScrollX(), -view.getScrollY()); 
    view.draw(c); 
    view.setDrawingCacheEnabled(true); 
    Bitmap cacheBmp = view.getDrawingCache(); 
    Bitmap viewBmp = cacheBmp.copy(Bitmap.Config.ARGB_8888, true); 
    view.destroyDrawingCache(); 
    return new BitmapDrawable(viewBmp); 

} 

public TextView createContactTextView(String text){ 
    //creating textview dynamically 
    TextView tv = new TextView(this); 
    tv.setText(text); 
    tv.setTextSize(20); 
    tv.setBackgroundResource(R.drawable.oval); 
    tv.setCompoundDrawablesWithIntrinsicBounds(0, 0,  R.drawable.ic_clear_search_api_holo_light, 0); 
tv.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
       Drawable co = ((TextView) v).getCompoundDrawables()[2]; 

       if (event.getX() > v.getMeasuredWidth() - v.getPaddingRight() 
         - co.getIntrinsicWidth()) { 
          //tv.setText(""); 
          Log.i(TAG, "clicked on delete button"); 
        return true; 
       } else { 
        return false; 
       } 
     } 

}); 
    return tv; 


} 

它将在editText里面创建带有文本的Spans但是我想删除范围点击该范围内的删除按钮。我为它编写了代码“tv.setOnTouchListener(new OnTouchListener(){................”in createContactTextView function but not not working。 enter image description here}在editText中点击其删除按钮删除元素范围

+0

我要找一样的...请分享代码如果你已经找到解决方案... – VijayRaj

+0

当然,它的确如此不是。文本视图不直接使用。 TextView有一个OnTouchListener,但是只显示文本视图的位图后,不再有EventListner。 – Servus7

回答

0

将ImageSpan和ClickableSpan以相同的开始和结束位置。

sb.setSpan(new ImageSpan(bd),startSpan ,endSpan , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
sb.setSpan(new ClickableSpan() { 
        @Override 
        public void onClick(View widget) { 
         // DeleteHere 
        } 
       }, startSpan , endSpan , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

同时删除您touchlistener,它不会工作!现在设置LinkMovement您的EditText。

editText.setMovementMethod(LinkMovementMethod.getInstance()); 
+0

你能提供“删除此处”代码吗? –