- 公開日:2015年10月03日
- 最終更新日:2016年01月29日
記事概要
Androidのsdk 23でgetColorが非推奨になったので、その対策方法の記載です。
環境
- Android Studio 1.3.0
- OS X Yosemite
- android sdk 23(Android 6.0 Marshmallow(マシュマロ))
はじめに
毎年秋は、好例のandroidアップデートの時期です。新しいsdkのバージョン対応をしていくのにも随分と慣れてきました。
最初の頃はandroidの進化の速度についていくのはしんどかったのですが、今は当たり前になってしまいました。
人間慣れるものです。
というわけで今回は、非推奨になったgetColorメソッドの変更方法です。
getColor
sdk22までは、コード内でTextViewの文字色を変更する場合は以下のように記載していました。
switch (calendar.get(Calendar.DAY_OF_WEEK)) { case Calendar.SUNDAY: viewHolder.getTimeLabel().setTextColor(mContext.getResources().getColor(R.color.red)); break; case Calendar.SATURDAY: viewHolder.getTimeLabel().setTextColor(mContext.getResources().getColor(R.color.blue)); break; default: viewHolder.getTimeLabel().setTextColor(mContext.getResources().getColor(R.color.black)); }
上記は、カレンダーの土曜と日曜でテキストの色を変更しているコードです。
mContext.getResources().getColor(R.color.black)を呼び出して、TextViewの文字色を変更しています。
しかし、sdk23からはgetColorメソッドが非推奨になり、この部分はdeprecatedで表示されてしまいます。
ContextCompat.getColor
sdk23からはgetColorが非推奨になり、ContextCompat.getColorを使うようになりました。修正は以下のようにします。
switch (calendar.get(Calendar.DAY_OF_WEEK)) { case Calendar.SUNDAY: viewHolder.getTimeLabel().setTextColor(ContextCompat.getColor(mContext, R.color.red)); break; case Calendar.SATURDAY: viewHolder.getTimeLabel().setTextColor(ContextCompat.getColor(mContext, R.color.blue)); break; default: viewHolder.getTimeLabel().setTextColor(ContextCompat.getColor(mContext, R.color.black)); }
上記を記載することで、deprecatedの警告が消えます。
ContextCompat.getColorメソッドの実際のコードの中身は以下のように実装されています。
public static final int getColor(Context context, int id) { final int version = Build.VERSION.SDK_INT; if (version >= 23) { return ContextCompatApi23.getColor(context, id); } else { return context.getResources().getColor(id); } }
どうして振る舞いを変えたのかはわかりませんが、これからはContextCompat.getColorを使ったほうが良さそうです。
まとめ
Android 6.0 Marshmallow (android sdk 23)からは
getColorではなくContextCompat.getColor
を使いましょう。
技術的負債の返却はお早めに。
以上です
参考サイト
0 件のコメント:
コメントを投稿