2013-02-04 22 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内にテキストを含むスパンを作成しますが、そのスパンの削除ボタンをクリックして削除します。私はそれを "tv.setOnTouchListener(新OnTouchListener(){..............." のコードを書いたcreateContactTextView機能ではなく、その動作していない。 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を削除し、それはあなたのEditTextに!今すぐ設定LinkMovementを動作しません。

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

「ここで削除」コードを提供できますか? –

関連する問題