私は自分の活動が2つの可能なテーマ Theme_Holo
そして Theme_Holo_Light
ユーザによって選択される。このアクティビティでは、プログラムで水平ディバイダのようなものを描画する必要があります。仕切りの色は、選択したテーマに依存する必要があります。どのようにすれば簡単にできますか?
理想的には、標準の名前が必要です使用されているテーマに関係なく仕切りの色を表示し、その色名の実際のRGB実現は選択されたテーマと自動的に一致します。そんなことはありますか?プログラマがRBG値をハードコードする必要があると私には思われません。
もちろん、仕切りは一例に過ぎません。また、テーマに依存しない方法で、EditTextや他のウィジェットの色に名前を付けることもできます。
回答:
回答№1は0あなたのアクティビティで onCreate()
メソッドの呼び出し、呼び出し前 setContentView()
、を使用してテーマを設定する this.setTheme(customTheme)
;
または試してみてください、 Androidアプリケーションでのテーマの使用
回答№2の場合は0
独自のテーマ属性を作成してアプリケーションのテーマに使用し、ユーザーがアプリケーションのテーマを切り替えることができます。
まず、 attrs.xml
に /res/values
いくつかのテーマ属性を定義します:
<resources>
<attr name="myDividerColor" format="color" />
</resources>
次に、あなたの中に2つのテーマを作ってください /res/values/styles.xml
(または /res/values/themes.xml
テーマとスタイルを別々に行う場合)。 1つのテーマはAndroidの暗いテーマを拡張し、1つはAndroidの軽いテーマを拡張します。テーマにカスタム属性を追加する:
<resources>
<!-- Dark theme -->
<style name="AppTheme_Dark" parent="@android:Theme.Holo">
...
<item name="myDividerColor">@color/divider_dark</item>
</style>
<!-- Light theme. -->
<style name="AppTheme_Light" parent="@android:Theme.Holo.Light">
...
<item name="myDividerColor">@color/divider_light</item>
</style>
</resources>
私は name="myDividerColor"
, NOT android:name="myDividerColor"
最後に、アクティビティコードで次のように色を取得できます。
// the attrs you want
int[] attrs = {R.attr.myDividerColor};
// get attr values for the current theme
TypedArray a = obtainStyledAttributes(attrs);
// first arg is the index of the array, in same order as attrs array above
// second arg is a default value (if not defined or not a resource)
int dividerColor = a.getColor(0, Color.TRANSPARENT);