*

【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】リソースからいろいろ取得する

リソースで定義したいろいろをコード内で呼び出す方法です。 レイアウト //リソースからレ

記事を読む

no image

【android】スリープモードに入らせない

Androidでは一定時間、操作をしないとスリープモードに入って待機状態になってしまいますが、動

記事を読む

no image

[android] JSONのパースにかかる時間

リストデータなんかを保存したいというのはよくある要件だと思います。 DBは面倒だしカラム毎に集計す

記事を読む

no image

【android】DrawableとBitmap、リソースの相互変換 

Resource → Bitmap Bitmap bm = BitmapFactory.dec

記事を読む

no image

【android】ハードウェアキー入力を検出する

Activityを継承したクラスで下記を記述します。 public boolean

記事を読む

no image

【android】オーバーレイでトップレイヤーにViewを表示する

常にホーム画面や他のアプリより前面にViewを表示する方法です。 前面に透明のViewGroupを

記事を読む

no image

【android】 setOnClickListener(false)が効かない

間違いその1 OnClickListenerが登録されているViewにsetClickable

記事を読む

no image

【android】アプリのバージョン情報を取得する

int versionCode = -1; String versionName = &quo

記事を読む

no image

【android】任意のスレッドで処理を行う

非UIスレッドでUIを操作したい場合に、任意の処理をUIスレッド上で実行する。 目次

記事を読む

no image

【android】アニメーション

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

記事を読む

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 ↑