gpt4 book ai didi

android - 单击 editText 跨度中的删除按钮删除元素

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:54 32 4
gpt4 key购买 nike

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() {................”,但它不起作用。 enter image description here

最佳答案

将 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.setMovementMethod(LinkMovementMethod.getInstance());

关于android - 单击 editText 跨度中的删除按钮删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14685362/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com