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 但我想删除 span 在单击该 span 中的删除按钮时。我在 createContactTextView 函数中为它编写了代码“tv.setOnTouchListener(new OnTouchListener() {................”,但它不起作用。 在此处输入图像描述}

4

1 回答 1

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);

同时删除你的触摸监听器,它不会工作!现在将 LinkMovement 设置为您的编辑文本。

editText.setMovementMethod(LinkMovementMethod.getInstance());
于 2015-08-18T05:19:14.723 回答