リファレンス・カスタマイズ

【Android Studio】Color クラス と Resources を使った色の指定方法まとめ

 

Android 開発をしていると java ファイル側でテキストやボタンの色を変えたい場合があると思います。

例えばクイズアプリを作る場合

  • 正解なら文字を青くする
  • 不正解なら文字を赤くする

などプログラム側で色を切り替えることがあります。
 

今回はこのような時に使える「Colorクラス と Resources を使った色の指定方法」を紹介します。
 

紹介するのは

  1. 定義済みの色
  2. RGB
  3. ARGB
  4. HEX
  5. colors.xml から取得
  6. Android リソースから取得

の6種類です。

 


 

開発環境

Android Studio 3.4
Android Emulator Nexus 4 (API 27)
minSdkVersion 15
compileSdkVersion 28
 
 

このサンプルでは、色を変更する TextView を activity_main.xml に用意しました。

<TextView
    android:id="@+id/myText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:textSize="32sp" />

 
 

この TextView の文字を MainActivity.java から青色に変更していきます。

デフォルト
変更後

 
 

色の指定方法

① 定義済みの色

黒・白・赤などの一般的な色は、簡単に使えるように Color クラスに定義されています。

定義済みの色は Color.色の名前 と指定します。

TextView myText = findViewById(R.id.myText);
myText.setTextColor(Color.BLUE);

 

定義済みの色

  • BLACK
  • BLUE
  • CYAN
  • DKGRAY
  • GRAY
  • GREEN
  • LTGRAY
  • MAGENTA
  • RED
  • TRANSPARENT(透明)
  • WHITE □
  • YELLOW

 
 

② RGB

RGB形式で色を指定する場合は Color.rgb(int red, int green, int blue) と書きます。

TextView myText = findViewById(R.id.myText);
myText.setTextColor(Color.rgb(0, 0, 255));

 
 
 

③ ARGB

RGB形式に加えて透過度を指定する場合は Color.argb(int alpha, int red, int green, int blue) と書きます。

TextView myText = findViewById(R.id.myText);
myText.setTextColor(Color.argb(50, 0, 0, 255));

 

透過度を50にすると、このような色になります。


 
 
 

④ HEX

#0000ff のように HEX 値で色を指定する場合は Color.parseColor(String colorString) と書きます。

TextView myText = findViewById(R.id.myText);
myText.setTextColor(Color.parseColor("#0000ff"));

 
 
 

⑤ colors.xml から取得

次は colors.xml ファイルに自分で色を定義して使う方法です。

プロジェクトで何度も使用する色は colors.xml に定義しておくとコードの管理が簡単になるのでオススメです。
 

Android Studio 画面左側のプロジェクト構造にある app → res → values → colors.xml を開きます。


 
 

colors.xml に使いたい色を定義します。(7行目)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>

    <color name="myColor">#0000ff</color>
</resources>

 

java ファイル側では getResources().getColor(R.color.myColor) と書きます。

TextView myText = findViewById(R.id.myText);
myText.setTextColor(getResources().getColor(R.color.myColor));

参考:getColor メソッドの Deprecated 解消法(Java & Kotlin 対応)

 
 
 

⑥ Android リソースから取得

Android には標準で用意されているリソースがあり、色もたくさん用意されています。「標準で用意されているリソース」というと分かりにくいかもしれませんが、先ほど使用した colors.xml の Android デフォルト版といった感じです。
 

Android リソースの色を使う場合は android.R.color.色の名前 で指定できます。

TextView myText = findViewById(R.id.myText);
myText.setTextColor(getResources().getColor(android.R.color.holo_blue_dark));

参考:getColor メソッドの Deprecated 解消法(Java & Kotlin 対応)
 
 

色のサンプル

  • holo_blue_light
  • holo_red_light
  • holo_orange_light
  • holo_purple
  • link_text_holo_dark

 
その他の色は https://developer.android.com/reference/android/R.color#summary を参照してください。
 
 
 

まとめ

以上が Color クラス・Resources を使った色の指定方法でした。

どれを使えば良いのか悩まれる方もいるかもしれませんが、どれを使っても問題ありません。

個人的には colors.xml に定義する方法をお勧めします。
 

rgb や hex で指定すると

  • どんな色を指定したか直感的に分からない
  • 複数の箇所に使用すると、後から変更が面倒

というデメリットがあります。
 

一方 colors.xml に定義すると、java ファイル側で使用した時にコードの横に小さく色のサンプルが表示されます。


 

色を確認・変更する時に結構便利な機能なので、迷った時は colors.xml を使うのがオススメです
 
 

まとめコード

TextView myText = findViewById(R.id.myText);
myText.setTextColor(Color.BLUE);
myText.setTextColor(Color.rgb(0, 0, 255));
myText.setTextColor(Color.argb(50, 0, 0, 255));
myText.setTextColor(Color.parseColor("#0000ff"));
myText.setTextColor(getResources().getColor(R.color.myColor));
myText.setTextColor(getResources().getColor(android.R.color.holo_blue_bright));

 

ABOUT ME
Sara
「わかりやすく・シンプル」をモットーに、スマホアプリ・ウェブアプリの作り方を紹介します。 独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています🙂
guest
0 Comments
Inline Feedbacks
View all comments
0
この記事にコメントするx