这个问题最初是在上周举行的 AndroidDev Office Hours Hangout 的 Google 版主上发布的。这个问题实际上是现场回答的,如果你愿意,你可以在这里观看。我把它贴在这里是因为他们似乎对它很感兴趣,在这里我有更多的空间来详细说明。
AWebView
通常用于按作者的意图显示 Web 内容(正如他们在环聊中所说的那样)。但我使用 aWebView
来显示的不是内容本身,而是格式化的文本(主要是粗体、斜体、项目符号列表和文本对齐方式)。使用 a 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 构建内容字符串,它可以采用从主题中提取的文本颜色。