Help us understand the problem. What is going on with this article?

【Android】引数「int color」を設定する方法(4パターン)

More than 1 year has passed since last update.

背景

私が管理した限りでは、Android開発の初心者は、必ずこの不具合に直面し、混乱を極めていた。

例えば、これ。

TextView.setTextColor(int color)

なんてことない、テキストの文字色を変更するだけのことなのだが、Android開発の初心者は、皆、こう↓やってしまい、何時間もハマってしまう、色が変わんねーよ、、、と。

    mTextView.setTextColor(R.color.colorAccent);

まあ、こう↑やってしまう理由も分かる。

何故なら、xml上で定義する際に、こう↓なっているからだ。

    <TextView
        android:textColor="@color/colorAccent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

意味も分からずコードの「見た目」だけで覚えてしまうと、なんとなく似ているからと思って、やってしまうようだ。

    setTextColor(R.color.colorAccent);
    textColor="@color/colorAccent"

気持ちは分かる、ちょっとした罠だと思う。

引数「int color」は「リソースID」ではない

    mTextView.setTextColor(R.color.colorAccent);

この実装だと、引数に「リソースID」を渡していることになってしまう。

R.color.xxx」というのは、その名前(xxx)で定義されたリソースの在処、「リソースID」を示しているに過ぎない。

引数「int color」は、「リソースID」を求めているのではなく、「色を表現する値」を求めている。

サンプルコード(4パターン)

以下の「pattern 1」を見てもらえれば、引数に何を求められていたのかが、よく分かると思う。

        // set color pattern 1
        mTextView.setTextColor(0xff536dfe);

        // set color pattern 2
        mTextView.setTextColor(Color.parseColor("#536dfe"));

        // set color pattern 3
        mTextView.setTextColor(ContextCompat.getColor(this, R.color.colorAccent));

        // set color pattern 4
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            mTextView.setTextColor(getColor(R.color.colorAccent));
        }

(※「minSdkVersion 21:Lollipop」を前提としたサンプルコード)

関連記事

【Android】「NavigationView(ドロワーメニュー)」の「アイコンの色」を変更する

(※この記事の抜粋から本内容は構成)

CUTBOSS
床屋の主人なのか、マフィアのボスなのか、どちらが夢か分からない――。
https://note.com/cutboss
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした