*

【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】スリープモードに入らせない

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

記事を読む

no image

インテント

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

記事を読む

no image

【android】アプリ内課金を実装する

アプリ内課金のサンプルコードを解析します。 参考URL 公式API Android

記事を読む

no image

【android】サービスの実装

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

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

Resource → Bitmap Bitmap bm = BitmapFactory.dec

記事を読む

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 ↑