Как WebView может наследовать цвета от текущей темы Android?

Этот вопрос был первоначально размещен в Google Moderator для видеовстречи AndroidDev Office Hours Hangout, которая состоялась на прошлой неделе. На этот вопрос был дан ответ в прямом эфире, и вы можете посмотреть его здесь , если хотите. Я публикую это здесь, потому что они казались им заинтригованными, и здесь у меня есть немного больше возможностей для уточнения.

A WebView обычно используется для отображения веб-контента в соответствии с намерениями автора (как он заявляет в видеовстрече). Но я использую WebView для отображения не совсем содержимого как такового, а форматированного текста (в основном, жирного шрифта, курсива, маркированных списков и выравнивания текста). С WebView намного проще (другими словами, намного проще с HTML / CSS), чем использовать набор TextView и сохранять все это в идеальном формате.

Проблема в том, что я использую этот конкретный WebView с прозрачным фоном в AlertDialog . Цвет текста WebView берется из загруженного содержимого CSS, но важно, чтобы этот цвет контрастировал с цветом фона AlertDialog . И это моя проблема.

До Android 2.3 фон AlertDialog всегда был темным. Не имело значения, была ли тема приложения темной или светлой по умолчанию, диалоговое окно AlertDialog по-прежнему было темно-серым. Это на ванильном Android. Но даже на Android с оболочкой (Sense, TouchWiz, MotoBlur и т. Д.) AlertDialog всегда был темного цвета (как для тем по умолчанию / темная, так и для светлых тем).

Все изменилось с ICS (вероятно, изменилось с Honeycomb, но я этого не подтверждал). Темная тема по умолчанию теперь имеет темный AlertDialog , тогда как светлая тема фактически имеет светлый AlertDialog .

Поскольку я использую исключительно светлую тему в своем приложении, я мог легко решить свою проблему, загрузив содержимое WebView с разными файлами CSS. Один с темным цветом текста для версий ниже ICS и другой светлый цвет текста для ICS и выше. Это в основном решило бы мою проблему, если бы не скины OEM.

В своих версиях скинов для ICS они могут предоставлять темные / светлые темы для AlertDialog . Или нет. Они с большей вероятностью сделают именно то, что они делали, предоставив темные и светлые темы как обычно, но для AlertDialog только темную версию, независимо от темы приложения.

Я мог бы принудительно установить Holo в моем приложении и решить проблему таким образом, но я бы предпочел не вмешиваться в то, как вся система выглядит на устройствах пользователя. Например, если у них есть Sense и он им действительно нравится, я не хочу отображать Holo тематический AlertDialog при использовании моего приложения.

В конце концов, мой вопрос такой:

Итак, как мне с этим справиться? Как убедиться, что текст в моем WebView читается на фоне AlertDialog ? Независимо от версии Android, используемой темы, скинов OEM-производителей или нет ...

Я не знаю, насколько это возможно, но одна из альтернатив для решения этой проблемы - каким-то образом извлечь цвет текста из темы AlertDialog на устройстве. Но не тема по умолчанию или тема Holo , а тема DeviceDefault , как мне кажется.

Легко ли сделать это извлечение? Может ли это быть хорошим решением моей проблемы?Есть ли у вас другие альтернативы?

И последняя деталь ... Если вы смотрели видеовстречу и парней, которые мне ответили, один из них предложил внедрить CSS. Если я не был ясен раньше, мне не нужно этого делать. Мне просто нужно создать строку содержимого WebView с точным CSS, который я хочу, который может принимать цвет текста, извлеченный из темы.

10
задан Ricardo Amaral 1 February 2012 в 00:48
поделиться