Как исправить проблемы с видимостью фокуса ссылки Html.fromHtml (в ICS и Honeycomb)? - PullRequest
14 голосов
/ 24 октября 2011

Чтобы получить 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 приводит к ссылкам, которые можно нажимать и фокусировать. Когда пользователь фокусируется на конкретной ссылке (например, с помощью d-pad), текст ссылки изменяется каким-то существенным образом, чтобы показать, что фокус был получен.

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

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

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

Ответы [ 4 ]

2 голосов
/ 01 ноября 2011

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

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

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

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

1 голос
/ 28 октября 2011

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

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

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

1 голос
/ 31 октября 2011

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

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

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

a :hover {
   color: red;
}

UPDATE:

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

1 голос
/ 24 октября 2011

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

...