カラーリソースからcolor-intを取得する方法はありますか? 3つのシークバーの値を特定のレベルに設定できるように、リソース(R.color.myColor)で定義されている色の赤、青、緑の各コンポーネントを取得しようとしています。
この質問を検索結果に表示するのに役立つ別のユースケースの詳細については、私のリソースで定義されている色にアルファを適用したいと思いました。
@ 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)
);
あなたが使用することができます:
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サポートライブラリ (および this update)に基づいて、今すぐ呼び出す必要があります:
ContextCompat.getColor(context, R.color.name.color);
ドキュメント :によると
public int getColor (int id)
このメソッドは APIレベル23 で非推奨になりました。代わりにgetColor(int、Theme)を使用してください。
それはgetResources().getColorStateList(id)
のための同じ解決策です:
このように変更する必要があります。
ContextCompat.getColorStateList(getContext(),id);
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);
私は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));
}
}
@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
タグにnameフィールドを追加してください。 (まだ追加されていない場合)
<application
Android:name=".App"
...
>
...
</application>
今、あなたは行ってもいいです。アプリ内の任意の場所でResourcesCompat.getColor(App.getRes(), R.color.your_color, null);
を使用してください。
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))
ここでの回答は複雑すぎます。サポートライブラリは必要ありません。
getResources().getColor(R.color.idname);
getResources().getColor(R.color.idname, null);
チェックを追加すると完了です。
int color = Build.VERSION.SDK_INT<23 ? getResources().getColor(R.color.idname) : getResources().getColor(R.color.idname,null)
非活動クラスから色にアクセスするのは難しい場合があります。私が見つけた選択肢の一つは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;
}
}