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

Android 在Html.fromHtml()中显示导航到不同活动或片段的链接,android,Android,在string.xml文件中,我有包含链接和图像的Html文本,我已经成功地将图像存储在我的drawable文件夹中,但是显示从该活动导航到另一个活动的链接是我遇到的问题 用于在文本视图中设置文本 myTextView.setText(Html.fromHtml(getString(R.string.my_local_string), Html.FROM_HTML_MODE_COMPACT), new Html.ImageGetter() { @Overr

在string.xml文件中,我有包含链接和图像的Html文本,我已经成功地将图像存储在我的drawable文件夹中,但是显示从该活动导航到另一个活动的链接是我遇到的问题

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

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));
在string.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
,找到。。span使用
URLSpan
,删除该span并将其替换为自定义
可点击span
。您可以在它的
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);




]>
Hi,欢迎来到stackoverflow。当您说“从活动导航到另一个活动的链接”时,您的意思是导航到应用程序中的另一个活动(或)导航到浏览器(或)外部应用程序中的链接url吗?@ChrisvinJem navigate意味着从一个活动移动到另一个活动,我必须检测链接上的点击操作,以便传递正确的意图并移动到另一个活动。您需要解析html文本,将其放入
SpannableStringBuilder
,获取
URLSpan
,并将其替换为
ClickableSpan
。如果在同一文本中有更多链接,这将如何工作,我已经编辑了这个问题,在my_local_字符串中有两个链接,我想知道单击了哪个链接使用一些唯一的值(例如,跟踪迭代计数并使用它进行区分)在
onClick
侦听器中要区分链接,我更新了我的答案以显示一个示例。谢谢,getURL方法也适用于我,我已经接受了你的答案
<string name="my_local_string"><![CDATA[<imgsrc="myPic.jpg"/><br/><br/><a href="">MyLink</a><br/><a href="">MyAnotherLink</a><br/>]]></string>