【问题标题】:Defining colour constants in a Java file, not xml在 Java 文件中定义颜色常量,而不是 xml
【发布时间】:2023-04-02 22:10:01
【问题描述】:

将颜色定义为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 中用于布局/主题和再次在代码中,以这种方式定义颜色的优点是不需要重复的 getResources() 调用和需要将Context 参数传递给不继承自Context 类的类的方法和构造函数。

【问题讨论】:

  • 实际上调用getResources()需要特定类的context,所以可能通过getresources().getColor()访问颜色比以YourColorClass.colorName访问颜色要重一些,但是访问时间或资源不同可以忽略不计。

标签: java android android-xml android-color


【解决方案1】:

实际上并没有为此定义的约定。


在这种情况下最重要的是

  • 清晰度
  • 性能
  • 可扩展性

如果在您的情况下,此删除声明重复并使您的代码更清晰,而不影响性能,是的,您可以并且必须使用它

但请注意:这不是一般规则,您必须单独分析每个案例并明智地决定,对于其他案例,使用AppColors 类可能会产生重复或性能问题(如果有很多请求)而不是使用数据库表。

【讨论】:

  • 您是说对常量提出许多请求会导致性能问题吗?请问你能扩展一下吗?
  • 不,我的意思是数据库上有很多请求,如果您的应用程序使用数据库发出多个请求,这些请求可能会降低性能......实际上,在这种情况下,静态类将被实例化一次并且对常量的访问将更快。
  • 通常,如果我必须多次访问数据库表,我会填充 Java 对象以提高性能和远程连接的数据传输。
【解决方案2】:

没有。它完全取决于您定义颜色的位置。将它们保存在 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);一样使用它

【讨论】:

  • 不错的建议,是的,部分问题实际上在于传递Context所需的代码量,然后将每种颜色存储在变量中,等等。以这种方式访问​​实例会加快进程。
【解决方案3】:

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

  1. 您在问题中列出了关于定义它的主要论点 两次。
  2. 您可以覆盖不同值文件中的颜色 如果您愿意,例如为不同的颜色使用不同的颜色 语言、屏幕方向等。
  3. 您可以在布局 xml 中使用颜色。

要了解有关该主题的更多信息,请尝试阅读以下内容:http://developer.android.com/guide/topics/resources/overview.html

【讨论】:

  • 我没有考虑为不同的配置(方向等)创建不同的 color xml 文件所带来的优势。我认为您的帖子涵盖了主要的优点/缺点。
猜你喜欢
  • 2011-07-19
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多