Динамическая установка ссылок на текст в strings.xml - PullRequest
9 голосов
/ 11 февраля 2010

Я пытаюсь создать приложение со встроенной локализацией, но я хочу, чтобы я мог создать веб-ссылку в тексте, 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>

Я не проверял этот бит, но из раздела локализации на 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 );

Но это тоже не сработало.

Итак, я хотел бы знать, есть ли способ динамического добавления нескольких URL-адресов в разные разделы одного и того же текста, которые будут ссылаться на веб-контент?

Ответы [ 4 ]

16 голосов
/ 30 марта 2012

Проблема в том, что ваши теги ссылок "a href" находятся в пределах strings.xml и анализируются как теги при анализе strings.xml, что вам не нужно. Это означает, что вам нужно, чтобы он игнорировал теги, используя CDATA XML:

<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());
5 голосов
/ 11 декабря 2012

В вашем макете установите android:autoLink на web

<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>
3 голосов
/ 03 апреля 2010

Вы должны реализовать

setMovementMethod(LinkMovementMethod.getInstance());

в вашем Textview

Вот лучший пример:

интерактивными-URLs-в-андроида-TextViews

3 голосов
/ 11 февраля 2010

Попробуйте использовать Html.fromHtml() для преобразования HTML в Spannable, который вы вставили в TextView. С тем, что у вас есть в # 1, я бы ожидал, что TextView покажет исходный HTML, а не визуализированный HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...