【问题标题】:Most efficient way to set TextView colour设置 TextView 颜色的最有效方法
【发布时间】:2020-04-10 23:21:42
【问题描述】:

设置TextView 的颜色最有效的方法是什么?为什么?是否有 1 种内存和/或处理器效率更高的方法?或者我的应用程序在运行时发生的情况完全没有区别?每次设置颜色时引用颜色资源比声明 RGB 更好吗?

选项 1(使用 RGB 通道)

myTextView.setTextColor(Color.rgb(154,160,166))

选项 2(使用颜色解析器)

myTextView.setTextColor(Color.parseColor("#2B3A11"))

选项 3(使用来自 colors.xml 的颜色资源)

myTextView.setTextColor(ContextCompat.getColor(context, R.color.<name_of_colour>))

【问题讨论】:

  • 在我看来,选项 1 是最有效的,因为创建非常清晰,并且通过定义三个精确值快速完成。选项 2 和 3 需要额外的计算步骤。 2:需要解析一个字符串,3:必须从资源文件中读取->每次读取的文件。
  • 这些方法中哪个更快有关系吗?无论哪种方法更快,都会小到你甚至很难测量它的一小部分。您应该问“哪个更具可读性和可维护性”的问题。答案是第三个。
  • 选项 4 - 将常量保存为常量,例如 static final Color MY_COLOR = Color.parseColor("#2B3A11"); 并使用 myTextView.setTextColor(MY_COLOR);(然后您可以摊销成本,并使用您认为最容易阅读的任何一个来设置 MY_COLOR)。
  • 如果您的屏幕上有足够多的浏览量以使这些浏览量在速度上有任何可衡量的差异,那么您需要解决更大的问题。

标签: java android kotlin android-color


【解决方案1】:

选项 1 应该是为 TextView 设置颜色的最快方法。选项 2 是一个非常封闭的第二个。因为 RGB 值和 Hexcode 都以类似的方式起作用。这一切都归结为调用它们的函数以及这些函数如何在后台执行(查看rgbparseColor,了解这些函数的描述和实现)。

作为 myTextView.setTextColor(...) 是一样的。因此,背景中的 textview 发生的事情保持不变,只是颜色的拾取方式不同。

每次设置颜色时引用颜色资源是否比声明 RGB 更好?
Ans- 这取决于您自己的使用情况,例如

如果您想多次使用一种颜色并且发现很难记住 rgb 代码,那么您绝对应该将颜色保存在颜色资源中并稍后参考。颜色资源是为此目的而创建的!正如@Fancesc 所说,它确实使您的文档具有可读性和可维护性。因此,更专业的做事方式。


另一方面,在需要时正确使用 rgb 可以为您节省很多麻烦。

  1. 您无需在任何地方保存任何数据。
  2. 使用时无需搜索整个颜色资源文件。
  3. 使用的颜色模型 99% 是 rgb/rgba,因此您所做的一切都会在这里结束。
  4. 加上更新的更新使处理颜色的 rgb 和 hex 值变得更加容易。 here 就是一个这样的例子。
  5. 适合不喜欢颜色名称的人。



我假设您已经知道所有这些,但还是决定问一下。XD。祝你有美好的一天。

【讨论】:

  • 我强烈建议不要在使用它的地方对值进行硬编码。这会将您的常量埋在所有地方的代码中,从而难以编辑它们。与到处硬编码用户可读字符串的错误非常相似。
  • 这就是为什么我试图给出一个中立的答案。我完全明白你的意思。这不是硬编码值的好方法,但它是一种方法。
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
相关资源
最近更新 更多