510

カラー リソースから color-int を取得する方法はありますか?

3 つのシークバーの値を特定のレベルに設定できるように、リソース (R.color.myColor) で定義された色の赤、青、緑のコンポーネントを個別に取得しようとしています。

4

13 に答える 13

1039

以下を使用できます。

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
于 2011-03-11T09:59:29.883 に答える
124

新しい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 に基づいて適切な色を取得します。

同じアクティビティで、ダーク/ライト テーマなどの異なるテーマを使用する場合に特に必要です。テーマとスタイルについてさらに理解したい場合は、この講演をお勧めします:スタイルを使用したテーマの開発

Nick Butcher - Droidcon Berlin - スタイリッシュなテーマの開発

于 2015-08-27T15:38:56.960 に答える
5

使用するように更新しました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));
    }
}
于 2016-03-09T16:47:56.693 に答える
2

この質問を検索結果に表示するのに役立つ可能性のある別のユースケースの詳細については、リソースで定義された色にアルファを適用したいと考えました。

@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)
);
于 2019-10-31T17:59:16.763 に答える
0

最近の作業方法:

getColor(R.color.snackBarAction)
于 2020-01-08T12:10:05.000 に答える