Android のオプション メニューには、少なくとも 2 つの背景色があることに気付きました。HTC Hero の背景は白で、Samsung Galaxy S II の背景は黒です。
背景メニューのアイコンを設定すると、これが問題になりました。Android のオプション メニューの背景色を検出する方法はありますか?
Android のオプション メニューには、少なくとも 2 つの背景色があることに気付きました。HTC Hero の背景は白で、Samsung Galaxy S II の背景は黒です。
背景メニューのアイコンを設定すると、これが問題になりました。Android のオプション メニューの背景色を検出する方法はありますか?
可能な解決策:
Android 4.0 以降では、ライト/ダーク ホロ テーマを設定することもできます。これは、(少なくとも理論上は) 異なる電話メーカー間で変更されないことが保証されているため、HTC Sense、Samsung TouchWiz などで同じように表示されます。
実に悩ましい問題です。
私の実装では、常に android.R.drawable.IC_menu_ *の標準アイコンを使用するようにしています。したがって、これらのアイコンはフレームワークの一部であり、ユーザーは自分のアプリで一般的なアイコンが表示されることに常に前向きな驚きを感じています!
これにより、デバイスでのユーザー エクスペリエンスが非常に良好に継続されますが、質問の答えにはなりませんが、少なくとも回避策は提供されます。
たとえば、Android 2.2 のすべてのアイコンは次のとおり です。
まず、タイトルの質問に答えます。
現在のテーマの属性を読み取ることで、オプション メニューの背景を参照して読み取ることができます。この属性はpanelFullBackground
. たとえば、XML¹ のテキストビューの背景として設定します:
<TextView android:background="?android:attr/panelFullBackground"
... />
背景は単色に見えますが、そうではありません。実際にはビットマップです。よく見ると上部にグレーの枠線(android 2.3+)やドロップシャドウ(<= android 2.2)があるのでちょっと難しいです。panelColorBackground
幸いなことに、drawable の背景色に可能な限り近い色に一致する別の属性があります。したがって、通常の背景色だけが必要な場合は、代わりにこれを使用してください。
¹これは確かにコードから読み取ることもできますが、現時点では頭のてっぺんからはわかりません。後で調べて編集するかもしれません。
アイコンについて
したがって、上記のような色が得られますが、暗い色か明るい色かを知るために処理する必要があります。それを行うことはできますが、これらのアイコンを処理する通常の方法ではありません。考えられるすべてのケースをカバーするまで、おそらくかなりの作業が必要です。各バリアントのアイコンを作成する必要があることは言うまでもありません。
通常は、プラットフォーム メニュー アイコン スタイルを採用する必要があります。これはすべてのデバイスで機能し、ユーザーになじみのあるものに見えます(これに従わないカスタム アイコンはしばしば「間違った」ように見えます - たとえば、astro ファイル マネージャーはこれを行うと私は信じています)。これは手動で行うこともできます(ガイドラインを参照)が、代わりに Android Asset Studio を使用することをお勧めします。2 つのフレーバーがあります。
File->New->Other->Android Icon Set
) 。両方のワークフローはかなり似ています。ポイント「メニュー アイコン」を選択し、ウィザードに従います。目的のアイコンの形状の輪郭を描く単純な白黒のビットマップを入力するように求められます。いずれかを指定すると、アセット スタジオがすべてを生成します。「clipart」オプションを少し試してみてください。ビットマップの例がいくつかあり、どのように機能するかを確認できます。完了すると、webapp は、プロジェクト ディレクトリに抽出できる単純な zip を提供します。Eclipse バージョンは、ウィザードで選択したプロジェクトにそれを直接追加します。
背景色は、製造元によってFrameworkに実装されているため、何でもかまいません。あなたはそれを読むことができません、実際あなたはそれを読む必要は決してないでしょう。
res / menuフォルダーにカスタムメニューレイアウトを作成し、スタイルを設定して使用するだけです。