*

【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


以上です。

関連記事

no image

【android】 Android4.1のserviceでdefaultPreferenceがおかしい

【現象】 ActivityでdefaultPreferencesで保存したデータがservice内

記事を読む

no image

【android】 adbコマンド集

●adbサービス起動 adb start-server ●adbサービス終了 adb

記事を読む

no image

【android】処理時間を計測する

パフォーマンスのリファクタリングを行うには処理時間の計測がかかせません。 SDK標準のクラスを使っ

記事を読む

no image

[android] モンキーテスト(Monkey Test)を実行する

最近テストの効率化に目覚めました。 モンキーテストは猿にアプリを渡してみてめちゃくちゃな操作をさせ

記事を読む

no image

【android】アニメーション

Viewにアニメーションを付加する方法です。 目次 アニメーションの実行 de

記事を読む

no image

【android】 webviewでassetsのリソースを使用する

webviewでassets内のリソースにアクセスするには file:///android_a

記事を読む

no image

【android】リスト項目のmatch_parentが効かない

下記のようなリスト項目用のレイアウトを用意して、リストの右端にチェックボックスを置くようにしたのです

記事を読む

no image

【andoid】ViewPagerを使う

1. layout.xmlにViewPagerを配置  2. PagerAdapter.jav

記事を読む

no image

【android】 APIバージョンによる動作の違い

「最近使用したアプリケーション」からの起動 2.x系 -> onNewIntentが呼ばれる 4

記事を読む

no image

【android】Activityとプロセスのライフサイクル

またもやライフサイクル周りでハマったのですが、Androidのライフサイクルは複雑で困ります。 G

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

no image
知らないと損をする6つのライセンスまとめ

オープンソースやフリーウェア、フリー素材などが巷に溢れ、それらを利用す

no image
ガリレオ:ニュースブラウザをリリースしました。

概要 ガリレオはニュースを読んだり、検索する機能に特化したブラウザア

no image
【android】Activityとプロセスのライフサイクル

またもやライフサイクル周りでハマったのですが、Androidのライフサ

→もっと見る

PAGE TOP ↑