在 Html.fromHtml() 中显示导航到不同活动或片段的链接



在字符串.xml文件中,我有带有链接和图像的 Html 文本,我已经成功地在我的可绘制文件夹中照亮了图像存储,但显示从该活动导航到另一个活动的链接是我遇到问题的地方

用于在文本视图中设置文本

myTextView.setText(Html.fromHtml(getString(R.string.my_local_string), Html.FROM_HTML_MODE_COMPACT), new Html.ImageGetter() {
                    @Override
                    public Drawable getDrawable(String source) {
                        int id;
                        if (source.equals("myPic.jpg")) {
                            id = R.drawable.myPic;
                        } 
                        Drawable d = getResources().getDrawable(id);
                        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
                        return d;
                    }
                }, null));

在字符串.xml文件中

<string name="my_local_string<[CDATA[<imgsrc="myPic.jpg"/<br/<br/<a href="">MyLink</a><br/><a href="">MyAnotherLink</a><br/> ]]></string>

我必须检测两个链接的点击

HTML 字符串解析为 SpannableStringBuilder ,使用 URLSpan 找到 .. span,删除该跨度并将其替换为您的自定义ClickableSpan。您可以在它的onClick中启动新活动。您需要按照以下几行执行一些操作。

SpannableStringBuilder builder = (SpannableStringBuilder) Html.fromHtml(getString(R.string.my_local_string), Html.FROM_HTML_MODE_COMPACT, new Html.ImageGetter() {
    @Override
    public Drawable getDrawable(String source) {
        int id;
        if (source.equals("myPic.jpg")) {
            id = R.drawable.myPic;
            Drawable d = getResources().getDrawable(id);
            d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
            return d;
        } else {
            return null;
        }
    }
}, null);
URLSpan[] spans = builder.getSpans(0, builder.length(), URLSpan.class);
//Keep track of the links
int i=0;
for (URLSpan span : spans) {
    int start = builder.getSpanStart(span);
    int end = builder.getSpanEnd(span);
    builder.removeSpan(span);
    //Assign the value to a final variable so that it can be used inside the onClick
    //to determine which link was clicked.
    final int finalI = i;
    builder.setSpan(new ClickableSpan() {
        @Override
        public void onClick(View v) {
            Log.d("main", "link clicked");
            String message;
            if (finalI == 0) {
                //First link
                message = "First link clicked";
            } else {
                //Second link, and so on
                message = "Second link clicked";
            }
            Toast.makeText(Main2Activity.this, message, Toast.LENGTH_SHORT).show();
        } }, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    i++;
}
textView.setText(builder);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setHighlightColor(Color.TRANSPARENT);
<string name="my_local_string"><![CDATA[<imgsrc="myPic.jpg"/><br/><br/><a href="">MyLink</a><br/><a href="">MyAnotherLink</a><br/>]]></string>

最新更新