Android 在Html.fromHtml()中显示导航到不同活动或片段的链接
在string.xml文件中,我有包含链接和图像的Html文本,我已经成功地将图像存储在我的drawable文件夹中,但是显示从该活动导航到另一个活动的链接是我遇到的问题 用于在文本视图中设置文本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
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>