この質問は、先週行われた 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
に対してテキストが読めるようにするにはどうすればよいですか? AlertDialog
Android のバージョン、使用されているテーマ、または OEM によってスキンされているかどうかに関係なく...
これがどれほど実現可能かはわかりませんが、この問題を解決するための 1 つの代替手段AlertDialog
は、デバイスのテーマからテキストの色を抽出することです。しかし、デフォルトのテーマやHolo
テーマではなく、DeviceDefault
私が信じているテーマです。
この抽出は簡単ですか?それは私の問題の良い解決策になるでしょうか?他の選択肢はありますか?
最後にもう 1 つ詳細があります... ハングアウトを見て、実際に私に答えてくれた人たちの 1 人が、CSS を挿入することを提案しました。もし私が前に明確でなかったなら、私はそれをする必要はありません。WebView
テーマから抽出されたテキストの色を取得できる、必要な正確な CSS を使用してコンテンツ文字列を作成するだけです。