android - 如何处理 editText 中 imageSpan 的 onClick 事件?

标签 android android-edittext spannable imagespan

我正在开发一个应用程序,用户可以在其中选择图库中的图像并将其添加到 editText 中,现在我希望如果用户单击 editText 中的图像它应该以全屏模式打开,我使用了以下代码:-

public void addToEdt(Bitmap bitmap){
    SpannableString ss = new SpannableString("abc");
    Drawable d = new BitmapDrawable(getResources(), bitmap);
    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
    ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
    ss.setSpan(span, 0, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    edt_note.setTransformationMethod(null);
    edt_note.getText().insert(edt_note.getSelectionStart(), ss);

    final int start = ss.getSpanStart(span);
    final int end = ss.getSpanEnd(span);

    ClickableSpan click_span = new ClickableSpan() {
        @Override
        public void onClick(View widget) {
                   Toast.makeText(getApplicationContext(),"Clicked",Toast.LENGTH_LONG).show();
        }
    };

    ClickableSpan[] click_spans = ss.getSpans(start, end,  ClickableSpan.class);

    if(click_spans.length != 0) {
        // remove all click spans
        for (ClickableSpan c_span : click_spans) {
            ss.removeSpan(c_span);
        }
    }

    ss.setSpan(click_span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}

试过上面的代码,但它没有监听 onClick 事件, 现在,我如何监听此图像上的点击事件并执行进一步的任务?

最佳答案

在 editText 的相同开始和结束位置的可点击跨度。

sb.setSpan(cs, imageStartSpan,imageEndSpan , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

还有

editText.setMovementMethod(LinkMovementMethod.getInstance());

我无法为您编写完整的代码。试试下面的示例:-

public void addToEdt(Bitmap bitmap){
    SpannableString ss = new SpannableString();
    Drawable d = new BitmapDrawable(getResources(), bitmap);
    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
    ss.append("abc"); // Append the text here
    ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
    ss.setSpan(span, 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // start(0) and end (2) will create an image span over abc text
    ss.setSpan(new ClickableSpan() {
                @Override
                public void onClick(View widget) {
                    ss.delete(0, 2);
                    editText.setText(ss);
                }
            },0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // this will add a clickable span and on click will delete the span and text
    editText.setText(ss); // this will show your image/clickable span in edittext
}


editText.setMovementMethod(LinkMovementMethod.getInstance());

关于android - 如何处理 editText 中 imageSpan 的 onClick 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32040166/

相关文章:

Android: Activity 在什么时候完全加载并呈现出来?

java - 使用 BaseAdapter 在 ListView 中显示 ArrayList

android - 禁用在editText android中输入

java - 在 Android studio 中替换导航栏中的 fragment 时出错

android - 如何在Unity中高速碰撞物体

android - 如何在软键盘中获得 "done"按钮?

Android 多行数字编辑文本

android - 如何在 sqlite 中存储跨区字符串?

android - 如何使用可点击对象消除可跨字符串中的下划线?

android - 使用索引更改 TabLayout 中特定选项卡的选定/未选定文本颜色(仅样式一个选项卡)