动态设置strings.xml中的文本链接

时间:2010-02-11 11:54:25

标签: android text dynamic localization hyperlink

我正在尝试制作内置本地化的应用,但我想要一种方法,我可以在文本中创建一个Web链接,URL在别处定义(为了便于维护)。

所以,我在res / values / strings.xml中有我的链接:

<?xml version="1.0" encoding="utf-8"?>
<resources>
...
    <string name="link1">http://some.link.com</string>
    <string name="link2">http://some.link2.com</string>
</resources>

和我在res / values-en-rGB / strings.xml

中的本地化文本
<?xml version="1.0" encoding="utf-8"?>
<resources>
...
    <string name="sampleText">Sample text\nMore text and link1\nMore text and link2.</string>
</resources>

我没有测试过这一点,但是从localization section of developer.android.com它说这种减少内容重复的方法应该有效,尽管我不知道我应该把意大利文放在哪个文件夹中。它会在'res / values-it-rIT / strings.xml'中吗?让我们假设我也有其他各种语言。

我正在寻找一种方法来获取基本本地化的'sampleText'并插入我的html链接,并在点击时让它们工作。到目前为止,我尝试了两种方法:

1,

在'sampleText'(%s)中添加一些格式:

<string name="sampleText">Sample text\nMore text and <a href="%s">link1</a>\nMore text and <a href="%s">link2</a>.</string>

然后像这样处理文本:

TextView tv = (TextView) findViewById(R.id.textHolder);
tv.setText(getResources().getString(R.string.sampleText, getResources().getString(R.string.link1), getResources().getString(R.string.link2)));

但是当我点击链接时,这不起作用,即使链接文本被放入正确的位置。

2,我尝试使用Linkify但正则表达式路线可能很难,因为我正在寻找支持非拉丁语言的语言。我试图在链接文本周围放置一个自定义的xml标记,然后执行以下操作:

Pattern wordMatcher = Pattern.compile("<span1>.*</span1>");
String viewURL =    "content://" + getResources().getString(R.string.someLink);
Linkify.addLinks(tv, wordMatcher , viewURL );

但这也不起作用。

因此,我想知道是否有一种方法可以将多个网址动态添加到同一文本的不同部分,这些部分将链接到网络内容?

4 个答案:

答案 0 :(得分:16)

问题是你的“a href”链接标记在strings.xml内,并在解析strings.xml时被解析为标记,这是你不想要的。这意味着您需要使用XML的CDATA忽略标记:

<string name="sampleText">Sample text <![CDATA[<a href="http://www.google.com">link1</a>]]></string>

然后,您可以继续Html.fromHtml()并使用LinkMovementMethod点击它:

TextView tv = (TextView) findViewById(R.id.textHolder);
tv.setText(Html.fromHtml(getString(R.string.sampleText)));
tv.setMovementMethod(LinkMovementMethod.getInstance());

答案 1 :(得分:5)

在您的布局设置android:autoLinkweb

<TextView android:text="@string/text_with_url"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autoLink="web" />

在strings.xml中只需添加URL。

<string name="text_with_url">http://stackoverflow.com/ FTW!</string>

答案 2 :(得分:3)

尝试使用Html.fromHtml()将HTML转换为您放入Spannable的{​​{1}}。使用#1中的内容,我希望TextView显示HTML源代码,而不是呈现HTML。

答案 3 :(得分:3)

你必须实施

setMovementMethod(LinkMovementMethod.getInstance());
上的

这是一个更好的例子:

clickable-urls-in-android-textviews