この質問は、先週行われた AndroidDev Office Hours ハングアウトの Google モデレーターに最初に投稿されました。質問は実際にライブで回答されており、必要に応じてここで見ることができます. 彼らがそれに興味をそそられたように見えたので、ここに投稿しています。ここでは、もう少し詳しく説明する余地があります.
AWebViewは通常、作成者が意図したとおりに Web コンテンツを表示するために使用されます (ハングアウトで述べているように)。ただしWebView、コンテンツ自体ではなく、書式設定されたテキスト(主に太字、斜体、箇条書き、テキストの配置) を表示するために a を使用します。WebViewたくさんの TextView を使用してすべてを完全にフォーマットしておくよりも (つまり、HTML/CSS を使用すると) はるかに簡単です。
問題は、私がこれを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に対してテキストが読めるようにするにはどうすればよいですか? AlertDialogAndroid のバージョン、使用されているテーマ、または OEM によってスキンされているかどうかに関係なく...
これがどれほど実現可能かはわかりませんが、この問題を解決するための 1 つの代替手段AlertDialogは、デバイスのテーマからテキストの色を抽出することです。しかし、デフォルトのテーマやHoloテーマではなく、DeviceDefault私が信じているテーマです。
この抽出は簡単ですか?それは私の問題の良い解決策になるでしょうか?他の選択肢はありますか?
最後にもう 1 つ詳細があります... ハングアウトを見て、実際に私に答えてくれた人たちの 1 人が、CSS を挿入することを提案しました。もし私が前に明確でなかったなら、私はそれをする必要はありません。WebViewテーマから抽出されたテキストの色を取得できる、必要な正確な CSS を使用してコンテンツ文字列を作成するだけです。