Главная » Разработка для Android » Создание собственных шаблонов для Linkify

0

Чтобы описать собственный шаблон для Linkify, необходимо создать новое регулярное  выражение  RegEx, соответствующее  тексту, который вы хотите отобразить  в виде ссылки.

Как и в случае со стандартными типами, применять Linkify к Представ- лению можно с помощью метода Linkify.addLinks, но вместо константы  не- обходимо передать новое регулярное  выражение  RegEx. Вы также можете передать префикс, который будет добавлен к целевому пути URI после нажатия  ссылки.

В листинге  5.14 показано,  как применить  Linkify к Представлению для добавления  поддержки  данных о землетрясениях, предоставляемых с по- мощью Источника данных (который вы создадите  в главе 7). Чтобы  не до- бавлять всю схему, шаблон для Linkify считает за совпадение любой текст, начинающийся со строки quake, за которым  следует номер. Потом схема добавляется в начало пути URI, прежде чем сработает Намерение.

Листинг 5.14. Создание собственных  шаблонов для Linkify

int flags = Pattern.CASE_INSENSITIVE;

Pattern p = Pattern.compile("\\bquake[0-9]*\\b", flags);

Linkify.addLinks(myTextView, p, "content://com.paad.earthquake/earthquakes/");

Linkify также поддерживает интерфейсы TransformFilter и MatchFilter, что позволяет установить дополнительный контроль над структурой целе- вого пути URI и описание регулярного выражения. Пример использования этих интерфейсов представлен в следующем фрагменте  кода:

Linkify.addLinks(myTextView, pattern, prefixWith,

new MyMatchFilter(), new MyTransformFilter());

Использование интерфейса MatchFilter

Реализуйте метод acceptMatch в своем классе, который  унаследован от MatchFilter, чтобы добавить дополнительные условия в регулярное  вы- ражение.  acceptMatch срабатывает  при нахождении потенциального сов- падения, принимая в качестве параметров начальный и конечный индексы (вместе с полной искомой строкой).

В листинге 5.15 показана реализация интерфейса MatchFilter, которая отменяет любое совпадение, если перед найденной строкой находится знак восклицания.

Листинг 5.15. Использование MatchFilter для Linkify

class MyMatchFilter implements MatchFilter {

public boolean acceptMatch(CharSequence s, int start, int end) {

return (start == 0 || s.charAt(start-1) != ‘!’);

}

}

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии