カラー リソースから color-int を取得する方法はありますか?
3 つのシークバーの値を特定のレベルに設定できるように、リソース (R.color.myColor) で定義された色の赤、青、緑のコンポーネントを個別に取得しようとしています。
カラー リソースから color-int を取得する方法はありますか?
3 つのシークバーの値を特定のレベルに設定できるように、リソース (R.color.myColor) で定義された色の赤、青、緑のコンポーネントを個別に取得しようとしています。
以下を使用できます。
getResources().getColor(R.color.idname);
カスタム カラーを定義する方法については、こちらをご覧ください。
http://sree.cc/google/android/defining-custom-colors-using-xml-in-android
EDIT(1):getColor(int id)
現在は非推奨である
ため、これを使用する必要があります:
ContextCompat.getColor(context, R.color.your_color);
(サポート ライブラリ 23 に追加)
編集(2):
以下のコードは、マシュマロの前と後の両方に使用できます (API 23)
ResourcesCompat.getColor(getResources(), R.color.your_color, null); //without theme
ResourcesCompat.getColor(getResources(), R.color.your_color, your_theme); //with theme
新しいAndroid サポート ライブラリ(およびこの更新) に基づいて、次のように呼び出す必要があります。
ContextCompat.getColor(context, R.color.name.color);
ドキュメントによると:
public int getColor (int id)
このメソッドは、 API レベル 23で廃止されました。代わりに getColor(int, Theme) を使用してください
これは、次の場合と同じソリューションですgetResources().getColorStateList(id)
。
次のように変更する必要があります。
ContextCompat.getColorStateList(getContext(),id);
編集 2019
ThemeOverlay
最も近いビューのコンテキストの使用について:
val color = ContextCompat.getColor(
closestView.context,
R.color.name.color
)
このようにして、ThemeOverlay に基づいて適切な色を取得します。
同じアクティビティで、ダーク/ライト テーマなどの異なるテーマを使用する場合に特に必要です。テーマとスタイルについてさらに理解したい場合は、この講演をお勧めします:スタイルを使用したテーマの開発
使用するように更新しましたContextCompat.getColor(context, R.color.your_color);
が、NullPointerExcepiton を引き起こす場合があります (一部のデバイス/Android バージョンではわかりません)。
したがって、すべてのデバイス/バージョンで動作するようにするために、null ポインターの場合は古い方法に戻ります。
try {
textView.setTextColor(ContextCompat.getColor(getActivity(), R.color.text_grey_dark));
}
catch(NullPointerException e) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
textView.setTextColor(getContext().getColor(R.color.text_grey_dark));
}
else {
textView.setTextColor(getResources().getColor(R.color.text_grey_dark));
}
}
この質問を検索結果に表示するのに役立つ可能性のある別のユースケースの詳細については、リソースで定義された色にアルファを適用したいと考えました。
@satの正解を使用:
int alpha = ... // 0-255, calculated based on some business logic
int actionBarBackground = getResources().getColor(R.color.actionBarBackground);
int actionBarBackgroundWithAlpha = Color.argb(
alpha,
Color.red(actionbarBackground),
Color.green(actionbarBackground),
Color.blue(actionbarBackground)
);
最近の作業方法:
getColor(R.color.snackBarAction)