*

【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】設定画面の作成

res/xml/preferences.xml <?xml version=&quo

記事を読む

no image

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

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

記事を読む

no image

インテント

基本 //任意のアクティビティの起動 Intent intent = new

記事を読む

no image

【android】ホーム画面や他のアプリの前面にViewを表示する。

WindowManagerのTYPE_SYSTEM_ALERTのレイヤーにViewを表示することで、

記事を読む

no image

【android】 年月だけのDatePicker

final DatePicker datePicker = new DatePicker(sel

記事を読む

no image

【android】サービスの実装

ダウンロードなどActivityに依存したくない大きなバックグラウンド処理や常駐プロセスを作りたい場

記事を読む

no image

【android】ネットワークの接続状況を確認する

コードから接続状況を確認。 ConnectivityManager co

記事を読む

no image

【android】アニメーション

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

記事を読む

no image

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

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

記事を読む

no image

アプリ間連携 Intentfiler

ブラウザの共有からURLを受け取る。 Manifest.xmlのURL受け取り先のactivity

記事を読む

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 ↑