Android 将值传递给包含链接的string.xml值
我在string.xml文件中有此值:Android 将值传递给包含链接的string.xml值,android,string.xml,Android,String.xml,我在string.xml文件中有此值: <string name="rights">Copyright © All Rights Reserved %1$d <b> <a href="http://www.example.com/">company name</a></b></string> 当我删除传递的值时,一切都正常&当用户单击公司名称时,它会将他/她带到公司网站 请注意,我在没有传递值的情况下尝试了xml中的自动链
<string name="rights">Copyright © All Rights Reserved %1$d <b> <a href="http://www.example.com/">company name</a></b></string>
当我删除传递的值时,一切都正常&当用户单击公司名称时,它会将他/她带到公司网站
请注意,我在没有传递值的情况下尝试了xml中的自动链接,但它没有按预期工作
但是,当我添加传递的值时&使用公司名称上方的代码没有下划线&当用户单击它时,它将不起任何作用
如何编辑我的上述代码以通过本年度并保持链接行为正常
注意:我使用了
String.format
将当前年份显示为英文数字,而不考虑其他地区的数字。我认为SpannableStringBuilder
是您要找的
TextView linkTv = (TextView) findViewById(R.id.link_tv);
linkTv.setMovementMethod(LinkMovementMethod.getInstance());
Spannable span = (Spannable) linkTv.getText();
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget){
//open the link
}
};
span.setSpan(clickableSpan, 0, span.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//for bold
span.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD), 0, span.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
如果您只想使某些部分可单击,则在
setSpan()
中切换0
和span.length()
的值,我认为SpannableStringBuilder
就是您要寻找的
TextView linkTv = (TextView) findViewById(R.id.link_tv);
linkTv.setMovementMethod(LinkMovementMethod.getInstance());
Spannable span = (Spannable) linkTv.getText();
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget){
//open the link
}
};
span.setSpan(clickableSpan, 0, span.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//for bold
span.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD), 0, span.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
如果只想使某些部分可单击,则在
setSpan()
中切换0
和span.length()
的值。当字符串资源同时具有格式参数(如%1$d
)和html标记时,必须使用多步骤过程来创建样式化的字符序列。这项额外工作是必要的,因为Resources.getString(int,Object…
和String.format(String,Object…
只能返回String
实例,而不能返回其他能够保存样式信息的CharSequence
子类
首先,将字符串资源更改为使用html实体转义html标记:
<string name="rights">Copyright © All Rights Reserved %1$d <b> <a href="http://www.example.com/">company name</a></b></string>
最后,使用Html.fromHtml()
解析Html标记:
CharSequence styled = Html.fromHtml(withHtmlMarkup);
然后,您可以将此样式化的文本设置为您的文本视图正常:
appInfoRights.setText(styled);
appInfoRights.setMovementMethod(LinkMovementMethod.getInstance());
开发者指南:
通常,这不起作用,因为格式(String,Object…
和getString(int,Object…
方法会从字符串中删除所有样式信息。解决这一问题的方法是使用转义实体编写HTML标记,然后在格式化完成后,使用fromHtml(String)
恢复转义实体
当您有一个同时具有格式参数(如%1$d
)和html标记的字符串资源时,您必须使用多步骤过程来创建样式化的CharSequence
。这项额外工作是必要的,因为Resources.getString(int,Object…
和String.format(String,Object…
只能返回String
实例,而不能返回其他能够保存样式信息的CharSequence
子类
首先,将字符串资源更改为使用html实体转义html标记:
<string name="rights">Copyright © All Rights Reserved %1$d <b> <a href="http://www.example.com/">company name</a></b></string>
最后,使用Html.fromHtml()
解析Html标记:
CharSequence styled = Html.fromHtml(withHtmlMarkup);
然后,您可以将此样式化的文本设置为您的文本视图正常:
appInfoRights.setText(styled);
appInfoRights.setMovementMethod(LinkMovementMethod.getInstance());
开发者指南:
通常,这不起作用,因为格式(String,Object…
和getString(int,Object…
方法会从字符串中删除所有样式信息。解决这一问题的方法是使用转义实体编写HTML标记,然后在格式化完成后,使用fromHtml(String)
恢复转义实体