Лучший подход
Как ответ @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);
в любом месте приложения.