簡體   English   中英

如何為ImageSpan添加單擊操作

[英]How to add click action for the ImageSpan

我在TextEdit中設置了ImageSpan。 我想添加動作 - 當用戶點擊ImageSpan時,它會彈出一個對話框並顯示大圖像。

我檢查了SDK,似乎ImageSpan不支持onclick。 反正是否支持ImageSpan或支持Image的其他Span的onclick?

我檢查了代碼,發現有一個用ImageSpan創建的URLSpan,因為輸入字符串是

但似乎URLSpan不起作用,並且沒有為它創建單擊操作。 任何的想法?

謝謝。

我一直在努力解決同樣的問題並找到解決方案。 要使圖像可單擊,您需要將ClickableSpan對象附加到與ImageSpan相同的圖像范圍。 當您從Html.fromHtml()獲取Spanned對象時,您可以瀏覽為其分配的ImageSpan對象集並附加其他ClickableSpan對象。

像這樣:

            ImageSpan[] image_spans = s.getSpans(0, s.length(), ImageSpan.class);

            for (ImageSpan span : image_spans) {

                final String image_src = span.getSource();
                final int start = s.getSpanStart(span);
                final int end = s.getSpanEnd(span);

                ClickableSpan click_span = new ClickableSpan() {

                    @Override
                    public void onClick(View widget) {

                        Toast.makeText(HtmlImagesTestActivity.this,
                                "Image Clicked " + image_src,
                                Toast.LENGTH_SHORT).show();

                    }

                };

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

                if(click_spans.length != 0) {

                    // remove all click spans

                    for(ClickableSpan c_span : click_spans) {
                        s.removeSpan(c_span);
                    }


                }


                s.setSpan(click_span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

            }               

我找到了關鍵點。為了響應點擊動作,我們不僅設置了clickablespan,還設置了edittext'setMovementMethod,代碼如下:

EditText.setMovementMethod(LinkMovementMethod.getInstance());

這是問題所在。 如果將setMovementMethod設置為LinkMovementMethod.getInstance() ,則edittext的光標將消失。 我不知道為什么

按照上面miaohua1982的回答,很明顯在將setmovement方法設置為LinkMovementmethod后光標被禁用。 我在textview中遇到了類似的問題,其中動作模式(將出現在textview的LongPress上)被取消,我沒有得到任何動作項。我通過擴展LinkMovementMethod並覆蓋如下方法解決了這個問題。 我希望即使在editext它解決了這個問題。

class MyMovementMethod extends LinkMovementMethod{

 @Override
  public boolean canSelectArbitrarily() {
       return true;
    }    

}

首先,使區域可以從屬性中單擊。
接下來,添加OnClickListner。

執行自定義操作onclick方法。

您可能想要使用ClickableSpan簽出並將TextView附加到LinkMovementMethod並覆蓋其onTouchEvent等....

希望有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM