![](/img/trans.png)
[英]Android Show image in TextView with SpannableStringBuilder - No errors, but no image, just plain text
[英]Handle SpannableStringBuilder image in android
我正在開發一個應用程序,其中選定的聯系人添加到EditText
與一個關閉標記圖像 ,當我點擊該關閉標記圖像時 ,應刪除該聯系人。 我已完成代碼顯示關閉標記圖像,但我不知道如何處理那些關閉標記圖像 。 請建議我如何。
我的代碼:
for (int i = 0; i < selectedItems.size(); i++) {
String na = selectedItems.get(i);
TextView tv = createContactTextView(na);
BitmapDrawable bd = (BitmapDrawable) convertViewToDrawable(tv);
bd.setBounds(0, 0, bd.getIntrinsicWidth(),
bd.getIntrinsicHeight());
sb.append(na + ",");
sb.setSpan(new ImageSpan(bd), sb.length()
- (na.length() + 1), sb.length() - 1,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
txt.setText(sb);
private Object convertViewToDrawable(TextView 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);
}
private TextView createContactTextView(String text) {
TextView tv = new TextView(this);
tv.setText(text);
tv.setTextSize(25);
tv.setBackgroundResource(R.drawable.oval_small);
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.close, 0);
return tv;
}
ClickableSpan
就是你想要的:
for (int i = 0; i < selectedItems.size(); i++) {
String na = selectedItems.get(i);
TextView tv = createContactTextView(na);
BitmapDrawable bd = (BitmapDrawable) convertViewToDrawable(tv);
bd.setBounds(0, 0, bd.getIntrinsicWidth(),bd.getIntrinsicHeight());
sb.append(na + ",");
sb.setSpan(new ImageSpan(bd), sb.length()
- (na.length() + 1), sb.length() - 1,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
final int index = i;
sb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
// here add your code
// delete your selectedItems[index]
// recreate your SpannedString and set to txt
}
}, sb.length()
- (na.length() + 1), sb.length() - 1,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
txt.setText(sb);
txt.setMovementMethod(LinkMovementMethod.getInstance()); // important
不要忘記最后一行
做你想做的最好的方法是使用AOSP *“官方” 芯片庫。
例如,當您開始在默認短信應用程序中輸入數字時,這將顯示可能匹配的聯系人列表。 一旦你選擇一個聯系人或號碼匹配一個,那么它將變成一個“芯片”,帶有一個“x”按鈕將其從接收者列表中刪除。
要獲得此行為,請直接從AOSP使用此庫: https : //android.googlesource.com/platform/frameworks/opt/chips/+/master
這里有一個簡短的解釋,由在谷歌工作的Android開發者倡導者Roman Nurik提供: https : //plus.google.com/+RomanNurik/posts/WUd7GrfZfiZ
* AOSP代表Android開源項目
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.