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