回答:
以下を使用できます。
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.R.color.some_color
例:(getResources().getColor(android.R.color.holo_blue_bright)
少なくともAPI 17では)
ContextCompat
とはResourcesCompat
?実用的な違いがない場合は、回答から1つを削除すると混乱が少なくなります。
新しい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に基づいて適切な色を取得できます。
同じアクティビティで、暗いテーマや明るいテーマなど、さまざまなテーマを使用する場合に特に必要です。テーマとスタイルについてさらに理解を深めたい場合は、このトークをお勧めします:スタイルを使ったテーマの開発
Theme
ヌルとして渡すことができ、これだけ呼び出すgetColor(R.color.my_color, null)
あなたがしているか不明何をテーマに合格する場合。
values / color.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- color int as #AARRGGBB (alpha, red, green, blue) -->
<color name="orange">#fff3632b</color>
...
<color name="my_view_color">@color/orange</color>
</resources>
int backgroundColor = ContextCompat.getColor(context, R.color.my_view_color);
// Color backgroundColor = ... (Don't do this. The color is just an int.)
myView.setBackgroundColor(backgroundColor);
getResources()
にActivity
かFragment
?
getResources()
。
getResources()
コンテキストを実装するものやビューでもパブリックAPIとして利用できます。
@satが答えるように、色を取得するための良いアプローチは
ResourcesCompat.getColor(getResources(), R.color.your_color, null);
または、getResources()
メソッドにアクセスできない場合は、以下の方法を使用します。
Context context = getContext(); // like Dialog class
ResourcesCompat.getColor(context.getResources(), R.color.your_color, null);
public void someMethod(){
...
ResourcesCompat.getColor(App.getRes(), R.color.your_color, null);
}
アプリのどこででも簡単に使用できます!Utilクラスや、ContextまたはgetResource()がないクラスでも
アクセス権がないContext
場合、あなたのメソッドのようにUtil
クラスの。
コンテキストのない以下のメソッドを想定します。
public void someMethod(){
...
// can't use getResource() without Context.
}
次にContext
、このメソッドのパラメーターとして渡し、使用しますgetResources().
public void someMethod(Context context){
...
context.getResources...
}
だからここにあなたがのようなどこからでもリソースにアクセスできるボーナスユニークなソリューションがありますUtil class
。クラスに追加Resources
するか、Application
存在しない場合は作成してください。
import android.app.Application;
import android.content.res.Resources;
public class App extends Application {
private static App mInstance;
private static Resources res;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
res = getResources();
}
public static App getInstance() {
return mInstance;
}
public static Resources getResourses() {
return res;
}
}
manifest.xml
<application
タグに名前フィールドを追加します。(まだ追加されていない場合)
<application
android:name=".App"
...
>
...
</application>
これで準備完了です。ResourcesCompat.getColor(App.getRes(), R.color.your_color, null);
アプリのどこでも使用できます。
使用するように更新しました ContextCompat.getColor(context, R.color.your_color);
が、(一部のデバイス/ Androidバージョンではわかりません)NullPointerExcepitonが発生することがあります。
したがって、すべてのデバイス/バージョンで機能させるために、ヌルポインターの場合は、古い方法を使用します。
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));
}
}
Resources.getColor(int, Theme)
場合は、可能であれば新しいAPIを使用してください。ランタイム例外をキャッチしないでください。
この質問を検索結果に表示するのに役立つ別のユースケースの詳細については、リソースで定義されている色にアルファを適用したいと考えていました。
@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)
);
非アクティビティクラスから色にアクセスするのは難しい場合があります。私が見つけた選択肢の1つはを使用することでしたenum
。enum
多くの柔軟性を提供します。
public enum Colors
{
COLOR0(0x26, 0x32, 0x38), // R, G, B
COLOR1(0xD8, 0x1B, 0x60),
COLOR2(0xFF, 0xFF, 0x72),
COLOR3(0x64, 0xDD, 0x17);
private final int R;
private final int G;
private final int B;
Colors(final int R, final int G, final int B)
{
this.R = R;
this.G = G;
this.B = B;
}
public int getColor()
{
return (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff);
}
public int getR()
{
return R;
}
public int getG()
{
return G;
}
public int getB()
{
return B;
}
}
あなたの現在の分。APIレベルは23です。getColor()
私たちが使用しているように単純に使用できますgetString()
。
//example
textView.setTextColor(getColor(R.color.green));
// if context is not available(ex: not in activity) use with context.getColor()
APIレベル未満が必要な場合は23
、これを使用してください:
textView.setTextColor(getResources().getColor(R.color.green));
ただしgetResources().getColor()
、APIレベルでは非推奨になっています23
。その場合、上記を次のものに置き換えます。
textView.setTextColor(ContextCompat.getColor(this /*context*/, R.color.green)) //Im in an activity, so I can use `this`
ContextCompat:の機能にアクセスするためのヘルパーContext
必要に応じて、SDK_INT
以下のように制約できます。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
textView.setTextColor(getColor(R.color.green));
} else {
textView.setTextColor(getResources().getColor(R.color.green));
}
ContextCompat.getColor(context, R.color.your_color);
活動中
ContextCompat.getColor(actvityname.this, R.color.your_color);
断片的に
ContextCompat.getColor(getActivity(), R.color.your_color);
例えば:
tvsun.settextcolour(ContextCompat.getColor(getActivity(), R.color.your_color))