将颜色定义为int
常量并静态访问它们是否存在任何陷阱,而不是每次需要时将它们从xml
拉出来?
例如,假设我定义了一个名为AppColors
的类:
public final class AppColors {
private AppColors() { throw new AssertionError(); }
public static final int COLOR_RED_500 = 0xFFF44336;
}
使用AppColors.COLOR_RED_500
访问颜色,而通常路线为getResources().getColor(R.color.red_500)
。
除了颜色可能需要定义两次,一次在xml
中进行布局/主题再次在代码中,以这种方式定义颜色的优点是不需要重复{{1调用以及需要将getResources()
参数传递给不从Context
类继承的类的方法和构造函数。
答案 0 :(得分:1)
实际上没有明确的约定。
在这种情况下最重要的是
如果在您的情况下,此删除声明重复并使您的代码更清晰,不影响性能,是,您可以并且必须使用它。
但请注意:这不是一般规则,您必须单独分析每个案例并明智地做出决定,对于其他情况,使用AppColors
类可能会造成重复或性能问题(如果有的话)请求)而不是使用数据库表。
答案 1 :(得分:1)
没有。它完全取决于您定义颜色的位置。将它们保存在xml中的优点是您可以在xml布局/主题中使用这些颜色。
例如:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/color_red_500" />
如果你厌倦了传递Context
来提取颜色,我建议你为Application
类提供一个静态单例实例
例如:
public class MyApplication extends Application {
private static MyApplication instance;
public static MyApplication getInstance() {
return instance;
}
public void onCreate() {
super.onCreate();
instance = this;
}
}
然后像MyApplication.getInstance().getResources().getColor(R.color.red_500);
答案 2 :(得分:0)
最好查看符合您需求的案例,但这里有一些反对意见。
要阅读有关此主题的更多信息,请尝试阅读:http://developer.android.com/guide/topics/resources/overview.html。