Этот вопрос был первоначально размещен в Google Moderator для видеовстречи AndroidDev Office Hours, которая состоялась на прошлой неделе.На вопрос был дан живой ответ, и вы можете посмотреть его здесь , если хотите.Я публикую это здесь, потому что они, кажется, заинтригованы этим, и здесь у меня есть немного больше возможностей для разработки.
A WebView
обычно используется для отображения веб-контента, как задумал автор (как они утверждают втусовка).Но я использую WebView
для отображения не только контента как такового, но и форматированного текста (в основном, жирный шрифт, курсив, маркированные списки и выравнивание текста).С WebView
намного проще (другими словами, с HTML / CSS намного проще), чем использовать кучу TextViews и сохранять их все идеально отформатированными.
Проблема в том, что я использую этот специфическийWebView
с прозрачным фоном на AlertDialog
.Цвет текста WebView
исходит из CSS загруженного контента, но важно, чтобы этот цвет контрастировал с цветом фона AlertDialog
.И это моя проблема.
До Android 2.3 фон AlertDialog
всегда был темным.Не имело значения, была ли тема приложения по умолчанию темной или светлой, AlertDialog
все еще был темно-серым.Это на ванильном Android.Но даже на скинах Android (Sense, TouchWiz, MotoBlur и т. Д.) AlertDialog
всегда был темным цветом (как для стандартных, так и для светлых тем).
Все это изменилось в ICS(это, вероятно, изменилось на Соте, но я не подтвердил это).Тема по умолчанию / темная теперь имеет темную AlertDialog
, тогда как у светлой темы на самом деле есть светлая AlertDialog
.
Поскольку я использую исключительно светлую тему в своем приложении, я легко могу решить свою проблему,загрузка содержимого WebView
с различными файлами CSS.Один с темным цветом текста для версий ниже ICS и другим светлым цветом текста для ICS и выше.Это в основном решило бы мою проблему, если бы не скины OEM.
В версиях скинов для ICS они могли бы предоставить темные / светлые темы для AlertDialog
.Или нет.Скорее всего, они будут делать именно то, что делали, предоставляя темные и светлые темы, как обычно, но для AlertDialog
только темной версии, независимо от темы приложения.
Я мог бы включить Holo
мое приложение и проблема решена таким образом, но я бы предпочел не вмешиваться в то, как система в целом выглядит на устройствах пользователя.Например, если у них есть Sense и он ему действительно нравится, я не хочу отображать Holo
тематический AlertDialog
при использовании моего приложения.
В конечном счете, мой вопрос таков:
Итак, как мне справиться с этим?Как сделать так, чтобы текст на моем WebView
читался на фоне AlertDialog
?Независимо от версии Android, используемой темы, или если она скина OEM-производителей или нет ...
Я не знаю, насколько это возможно, но одной из альтернатив для решения этой проблемы будет:каким-то образом извлеките цвет текста из темы AlertDialog
в устройстве.Но не тема по умолчанию или тема Holo
, а тема DeviceDefault
, я верю.
Легко ли выполнить это извлечение?Может ли это быть хорошим решением моей проблемы?Есть ли у вас другие альтернативы?
Еще одна деталь ... Если вы смотрели видеовстречу и парней, которые действительно ответили мне, один из них предложил ввести CSS.Если бы я не был ясен раньше, мне не нужно этого делать.Мне просто нужно построить строку содержимого WebView
с точным CSS-кодом, который я хочу, который может взять цвет текста, извлеченный из темы.