XMLで指定した色の一括変更

872 views
Skip to first unread message

rion.k.tanaka

unread,
May 16, 2013, 9:49:32 PM5/16/13
to android-g...@googlegroups.com
田中といいます。お世話になります。

アプリにおいて基調となる色を設定でいろいろ変えられるようにしたいと考えて
います。
1~2箇所ならsetBackGroundColorなどで書き換えれば済む話なのですが、複数
のlayoutで設定しており、またXMLで作成したButtonでも使用しているためいち
いち書き換えるのはスマートでありません。

そこで質問なのですが、XMLで指定している色を一括で動的に変更する方法はな
いでしょうか。
例えば、XMLに変数で指定する方法とか、色を参照しているポインタを強制的に
書き換える方法などです。
私なりに調べてみましたが、これらを実現する方法はわかりませんでした。

また他にもスマートに出来る方法がありましたらご教授ください。

よろしくお願いします。

けんぞ(たかはしこうぞう)

unread,
May 16, 2013, 10:33:37 PM5/16/13
to android-g...@googlegroups.com

まさしく「テーマ」の導入で解決しそうですが、
内容については連載ができそうなので省略します。


2013年5月17日金曜日 10時49分32秒 UTC+9 Katsuyoshi Tanaka:

rion.k.tanaka

unread,
May 17, 2013, 3:49:48 AM5/17/13
to android-g...@googlegroups.com
けんぞさん、ご回答ありがとうございます。

テーマを調べてみました。テーマの基本的な書き方、テーマを切り替える方法などは判っ
たのですが、色の切替を行うための記述方法がどうもよく判りませんでした。

以下の二つの方法を試してみましたが、記述がまずいためうまくいきませんでした。

1.テーマ毎に色を設定する

style.xml

<style name="ThemeRed" parent="android:Theme.Light">
<item name="android:color1">@color/red1</item>
<item name="android:color2">@color/red2</item>
</style>
<style name="ThemeBlue" parent="android:Theme.Light">
<item name="android:color1">@color/blue1</item>
<item name="android:color2">@color/blue2</item>
</style>

main.xml

<Button
android:id="@+id/button"
android:background="color1"
android:textColor="color2" />

この記述が間違っているのは承知してますが、このような記述でcolor1とcolor2にテー
マ毎に別の色を設定することはできますでしょうか。

2.色の違う部品を作成し、テーマ毎にまとめる

style.xmlに色別のButtonやTextViewを定義しておき、それらをThemeでまとめるような
記述が出来れば良いと思ったのですが、文法がよく判りませんでした。


改めてやりたいことをまとめておきます。

・設定を基調となる色を切り替えられるようにしたい。
・切り替えたい色は複数ある。
・色以外の属性は変化なし。
・なるべく個別に設定し直すのではなく、一括で切り替えたい。

以上です。
独学のため明後日の考え方をしているかもしれませんが、お返事いただければ幸いです。


2013/05/17 11:33:37 けんぞ(たかはしこうぞう) <kenzo...@gmail.com> wrote:

>
>
> まさしく「テーマ」の導入で解決しそうですが、
> 内容については連載ができそうなので省略します。

noxi

unread,
May 17, 2013, 4:03:55 AM5/17/13
to android-g...@googlegroups.com
noxiです。

この辺を参照すれば簡単にできると思います。

UIコンポーネント/参照によるXML属性値の指定 - Android Wiki*
http://goo.gl/bXSyL


2013年5月17日 16:49 rion.k.tanaka <rion.k...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
>
>

rion.k.tanaka

unread,
May 20, 2013, 12:03:54 AM5/20/13
to android-g...@googlegroups.com
田中です。

noxiさん、ありがとうございます。
さっそく試してみたいと思います。
--
rion.k.tanaka <rion.k...@gmail.com>

rion.k.tanaka

unread,
May 22, 2013, 12:49:45 AM5/22/13
to android-g...@googlegroups.com
田中です。

色の一括変更にいまだ悪戦苦闘しております。
けんぞさんとnoxiさんにお教えいただいてテーマを指定して色を切り替えること
にしまして、実際色を定義して切り替えるようにすることは出来ました。

ただし、定義した色をレイアウトXMLなどに使用することは出来ても、自分で定
義したボタンのカスタマイズファイル内で使用することが出来ません。
eclipseのグラフィカル・レイアウトでは正しく表示されますが、実行しようと
すると setContentView(R.layout.activity_main) で落ちます。

button_cmd.xml

<item><shape>
<solid android:color="?attr/MyColorBack" />
</shape></item>

×
<item><shape>
<solid android:color="@color/red" />
</shape></item>

エラーログには
E/AndroidRuntime(277): Caused by:
android.content.res.Resources$NotFoundException: File
res/drawable-hdpi/button_cmd.xml from drawable resource ID #0x7f020000

となっているので、button_cmd.xmlがまずいだろうと思うのですが、それ以上の
ことが判りません。

カスタマイズしたボタンを使いたいので出来れば色の指定はxmlファイル内で行
いたいと思っております。
このような使い方をするのは仕様としてNGなのでしょうか、それとも何か回避方
法はありますでしょうか。
確認できるサンプルを以下に置きました。ご興味のある方は試してみていただけ
たらと思います。

https://docs.google.com/file/d/0Bys2yE_xs9LPOG9pZTU1dWhJeGc/edit?usp=sharing

この件に関して何かご存じの方がいらっしゃいましたらご教授をお願いします。

Katsuyoshi Tanaka

unread,
May 22, 2013, 1:17:40 AM5/22/13
to android-g...@googlegroups.com
すいません先ほどの投稿ですが、○と×が間違っておりました。

button_cmd.xml

    <item><shape>
          <solid android:color="@color/red" />
    </shape></item>

×
    <item><shape>
          <solid android:color="?attr/MyColorBack" />
    </shape></item>

となります。よろしくお願いいたします。

2013年5月22日水曜日 13時49分45秒 UTC+9 Katsuyoshi Tanaka:
Reply all
Reply to author
Forward
0 new messages