在 Java 文件中定义颜色常量,而不是 xml
Defining colour constants in a Java file, not xml
将颜色定义为 int
常量并静态访问它们,每次需要时都从 xml
中拉出它们是否有任何缺陷?
例如,假设我定义了一个名为 AppColors
:
的 class
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
中为 layout/themes 一次是在代码中,以这种方式定义颜色的优点是不需要重复 getResources()
调用以及需要将 Context
参数传递给 class 的方法和构造函数,这些方法和构造函数不继承自 Context
class。
实际上没有为此定义的约定。
在这种情况下最重要的是
- 清晰度
- 性能
- 可扩展性
如果在您的情况下,此删除声明重复并使您的代码更清晰,而不影响性能,是的,您可以而且必须使用它。
但请注意:这不是一般规则,您必须单独分析每个案例并做出明智的决定,对于其他情况,请使用AppColors
class可能会产生口是心非或性能问题(如果有很多请求)而不是使用数据库 table.
最好检查适合您需要的情况,但这里有一些反对意见。
- 你在问题中列出了关于定义它的主要论点
两次。
- 您可以覆盖不同值文件中的颜色
如果您愿意,例如不同颜色的不同颜色
语言、屏幕方向等
- 您可以在布局 xml 中使用颜色。
要阅读有关该主题的更多信息,请尝试阅读此内容:http://developer.android.com/guide/topics/resources/overview.html。
没有。这完全取决于您定义颜色的位置。将它们保留在 xml 中的好处是您也可以在 xml layouts/themes 中使用这些颜色。
例如:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/color_red_500" />
如果您受够了通过 Context
来提取颜色,我建议您为您的 Application
class
创建一个静态单例实例
例如:
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);
一样使用它
将颜色定义为 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
中为 layout/themes 一次是在代码中,以这种方式定义颜色的优点是不需要重复 getResources()
调用以及需要将 Context
参数传递给 class 的方法和构造函数,这些方法和构造函数不继承自 Context
class。
实际上没有为此定义的约定。
在这种情况下最重要的是
- 清晰度
- 性能
- 可扩展性
如果在您的情况下,此删除声明重复并使您的代码更清晰,而不影响性能,是的,您可以而且必须使用它。
但请注意:这不是一般规则,您必须单独分析每个案例并做出明智的决定,对于其他情况,请使用AppColors
class可能会产生口是心非或性能问题(如果有很多请求)而不是使用数据库 table.
最好检查适合您需要的情况,但这里有一些反对意见。
- 你在问题中列出了关于定义它的主要论点 两次。
- 您可以覆盖不同值文件中的颜色 如果您愿意,例如不同颜色的不同颜色 语言、屏幕方向等
- 您可以在布局 xml 中使用颜色。
要阅读有关该主题的更多信息,请尝试阅读此内容:http://developer.android.com/guide/topics/resources/overview.html。
没有。这完全取决于您定义颜色的位置。将它们保留在 xml 中的好处是您也可以在 xml layouts/themes 中使用这些颜色。
例如:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/color_red_500" />
如果您受够了通过 Context
来提取颜色,我建议您为您的 Application
class
例如:
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);