【android】複数のカスタムテーマを設定で切り替える
公開日:
:
最終更新日:2012/05/30
android
背景色やアプリ全体のテーマ色を設定で変更したいという要望をもらったので実装してみました。
目次
属性値の名前を定義
res/values/attrs.xmlに使用する属性の名前を定義します。
下記を定義
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyTheme"> <attr name="myColor" format="color"></attr> <attr name="myText" format="string"></attr> <attr name="myInt" format="integer"></attr> <attr name="myRef" format="reference"></attr> </declare-styleable> </resources>
カスタムテーマを定義
res/values/theme.xmlに先程定義した属性の値を定義します。
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="テーマ名" parent="@android:style/Theme.Light.NoTitleBar"> <item name="myColor">#22AAFF</item> <item name="myText">hello theme</item> <item name="myInt">90</item> <item name="myRef">@drawable/icon</item> </style> </resources>
viewに属性を適用
実際にviewの属性値として適用していきます。
テーマ内の属性を参照する場合は
?attr/属性名
のように書きます。
<LinearLayout xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="?attr/myColor" /> <ImageView android:src="?attr/myRef" />
アプリケーションやアクティビティにテーマを適用
カスタムテーマはマニフェストファイルからも適用できますが、今回は設定により複数のテーマを切り替えるのでコードから適用します。
@Override public void onCreate(Bundle savedInstanceState) { //設定をロード if( condition ){ setTheme(R.style.テーマ1); }else{ setTheme(R.style.テーマ2); } super.onCreate(savedInstanceState); setContentView(R.layout.main); }// end of onCreate
以上です。
関連記事
-
【android】標準の設定画面を作る
設定画面のテンプレートです。 検索一発クンのコードから抜粋しました。 チェックボックス、リス
-
【android】非同期処理
Androidで非同期処理、マルチスレッドを処理するスニペット。 AndroidのスレッドはUIス
-
ダイアログを表示する
カスタムアラートダイアログ private void showCustomAlert(A
-
[android] モンキーテスト(Monkey Test)を実行する
最近テストの効率化に目覚めました。 モンキーテストは猿にアプリを渡してみてめちゃくちゃな操作をさせ
-
【android】任意のスレッドで処理を行う
非UIスレッドでUIを操作したい場合に、任意の処理をUIスレッド上で実行する。 目次
-
【android】言語・地域設定の取得
androidでは利用する言語と国名がjava.util.Localeのオブジェクトとして設定されて
-
【android】リスト項目のmatch_parentが効かない
下記のようなリスト項目用のレイアウトを用意して、リストの右端にチェックボックスを置くようにしたのです
-
【android】IMEの表示/非表示
//IMEを閉じる InputMethodManager inputMethodManager
-
【android】処理時間を計測する
パフォーマンスのリファクタリングを行うには処理時間の計測がかかせません。 SDK標準のクラスを使っ
-
【android】アプリのバージョン情報を取得する
int versionCode = -1; String versionName = &quo