在Java文件中定义颜色常量,而不是xml

时间:2015-10-01 10:14:53

标签: java android android-xml android-color

将颜色定义为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类继承的类的方法和构造函数。

3 个答案:

答案 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)

最好查看符合您需求的案例,但这里有一些反对意见。

  1. 您列出了问题中的主要论点,即定义它 两次。
  2. 您可以覆盖不同值文件中的颜色 如果您愿意,例如不同的颜色 语言,屏幕方向等。
  3. 您可以使用布局xmls中的颜色。
  4. 要阅读有关此主题的更多信息,请尝试阅读:http://developer.android.com/guide/topics/resources/overview.html