*

【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

【andoid】ViewPagerを使う

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

記事を読む

no image

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

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

記事を読む

no image

【android】言語・地域設定の取得

androidでは利用する言語と国名がjava.util.Localeのオブジェクトとして設定されて

記事を読む

no image

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

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

記事を読む

no image

【android】 adbコマンド集

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

記事を読む

no image

【android】バイブレーションを使う

必要なファイル MyApp.manifest MyApp.java MyApp.m

記事を読む

no image

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

Resource → Bitmap Bitmap bm = BitmapFactory.dec

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

【android】stringsリソースにパラメータを埋め込む

●strings.xml %n$x n : 引数に渡す際の順番。n番目の引数。 x

記事を読む

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 ↑