在 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.

最好检查适合您需要的情况,但这里有一些反对意见。

  1. 你在问题中列出了关于定义它的主要论点 两次。
  2. 您可以覆盖不同值文件中的颜色 如果您愿意,例如不同颜色的不同颜色 语言、屏幕方向等
  3. 您可以在布局 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);

一样使用它