Как исправить проблемы с видимостью фокуса ссылки Html.fromHtml (в ICS и Honeycomb)?

Чтобы получить TextView для отображения (и взаимодействия с ним) строк Html, мой код выглядит примерно так:

// itemHtml is a String of HTML defined above

TextView itemContent = (TextView) findViewById(R.id.itemContent);
itemContent.setText(Html.fromHtml(itemHtml));
itemContent.setMovementMethod(LinkMovementMethod.getInstance());

Если в строке Html есть ссылка, TextView приводит к ссылкам, на которые можно щелкнуть и которые можно сфокусировать. Когда пользователь фокусируется на определенной ссылке (например, с помощью крестовины), текст ссылки существенно изменяется, чтобы показать, что фокус был получен.

Проблема заключается в том, что когда я тестирую этот же шаблон, используя устройства с крестовиной, использующие Android Honeycomb (например, Google TV) или Ice Cream Sandwich, ссылка в тексте не показывает заметных признаков того, что ссылка имеет фокус.

Я знаю, что он получает фокус, потому что когда вы нажимаете Enter, он выполняет указанное действие. Вы даже можете перемещаться между различными ссылками в тексте; вы просто угадываете, по какой ссылке вы сейчас находитесь, что приводит к очень плохому взаимодействию с пользователем.

Я что-то делаю не так? Есть ли способ исправить это или обойти это?




Ответы (4)


Редактировать: после того, как я немного сошел с ума, я, наконец, подумал, что нашел решение. Однако это решение работает только для Honeycomb. ICS до сих пор не решен!

Начиная с API 11, в Android есть новый параметр TextViews для определения возможности выбора текста.

Вы можете установить его с помощью setTextIsSelectable(true) в TextView или определить в макете XML android:textIsSelectable="true"

Вероятно, лучше всего определить его в XML, чтобы поддерживать обратную совместимость приложения было тривиально. Просто убедитесь, что вы используете версию >= 11, иначе вы, вероятно, получите сообщение об ошибке.

person yydl    schedule 31.10.2011

Способ работы HTML.fromHTML заключается в создании «промежутков» с различными эффектами для различных символов строки. Одним из обходных путей для этого может быть использование ClickableSpan в сочетании с другим CharacterStyles, чтобы сделать текст интерактивным. Предыдущий диапазон позволит вам зарегистрировать обратный вызов, и этот обратный вызов может передавать намерение просмотреть URL-адрес (который откроет браузер).

person Blaskovicz    schedule 24.10.2011
comment
Я думаю, вы неправильно поняли. Как я уже упоминал, вызывается действие (т.е. открытие URL-адреса). Проблема в том, что нет визуального представления о том, что ссылка выбрана. - person yydl; 24.10.2011

Списки состояний цвета текста для Honeycomb+ могут не устанавливать для состояния фокусировки другой цвет, или вы переопределяете цвет, чтобы он был постоянным.

Проверьте цвета и стили в your_android_sdk_directory/android-14/data/res/

Установка текста на android:autoLink="web" также может помочь?

person FunkTheMonk    schedule 28.10.2011

Лучший способ сделать это — добавить стили CSS в ваш html. Я знаю, что Android поддерживает селектор :hover. Таким образом, вы можете исправить что-то вроде этого:

String myLink = "<a href=\"http:\/\/google.com\">your link</a>"
Html.fromHtml(myLink);

и найдите способ включить в него данные CSS: (я не уверен, как это сделать, но думаю, что это возможно)

a :hover {
   color: red;
}

ОБНОВИТЬ:

Я думаю, что ответ на ваш вопрос здесь.

person Romain Piel    schedule 31.10.2011