Android 在某些设备上渲染蓝色阴影错误

Android rendering shade of blue wrong on some devices

我是 运行 一个在各种设备上的应用程序,在两个设备上,某种蓝色阴影看起来不对。请看附图。任何想法为什么会这样? 如果我用另一种颜色替换颜色而不做任何其他更改,一切看起来都很好。

编者注:原发帖人指出项目资源中只有一个 colors.xml 文件,颜色定义一次。颜色由名称 (@color/pbr) 定义,值为 #447AD4。上面屏幕截图的布局始终使用相同的资源名称,但呈现为不同的颜色。

使用 paint.net 我可以验证文本颜色 "Search for your food" 在每台设备上都是相同的,这排除了 device-global 阴影或屏幕截图检索过程中的错误

  • 对于任何想要验证这一点的人:请注意检查字母中间的颜色,例如f 十字的中心,这样你就不会得到 anti-aliasing 颜色。
  • 更新: 这表明不同的区域颜色不是 device-global 颜色处理问题,因为至少文本颜色是相同的

确保你们都没有指定

  1. 不同的布局文件
  2. 不同颜色的可绘制对象

对于different Android versions/ screen densities / screen sizes

这可能是颜色 #447AD4 的设备特定问题。不同的智能手机制造商在其设备中使用不同类型的屏幕。所以我认为这可能是设备特定问题。

您是否检查过您引用的资源(颜色)没有使用配置限定符针对不同的屏幕分辨率多次提供?

例如,确保您在 values-mdpi 文件夹或 values-xxhdpi 文件夹中没有多个 colors.xml 或 styles.xml。如果它在多个文件夹中被引用,那是你的问题。

http://developer.android.com/guide/practices/screens_support.html#qualifiers

您可能已经在

中自定义了主题

res/values/style.xml

也在

中进行类似的自定义

res/values-v11/style.xml and res/values-v14/style.xml

(创建 values-v11values-v14 文件夹,如果还没有,然后将 style.xml 复制粘贴到其中。如果其中的文件夹和 style.xml 已经存在,追加你的东西并确保你没有通过覆盖文件删除任何重要的东西。)

Source


REASON


没有 "silver-bullet" 原因,但可能的原因之一可能是驱动程序。某些芯片组制造商在更新其图形驱动程序方面做得特别糟糕,这使得应用程序、游戏和任何图形内容的颜色在 phone 之间不一致。开发人员可能会在各种 Android 设备上遇到完全不同的配色方案,none 接近他们的预期。

三星屏幕使用不同形状的像素。

这个问题可能是由于 PenTile screen 造成的,主要区别在于红色、绿色和蓝色子像素与正常显示不同。

基本上,PenTile 像素不是获得相同大小的红色、绿色和蓝色子像素,而是获得红色和绿色或蓝色和绿色子像素。红色和蓝色比绿色大以平衡亮度。 因为在您的 phone 上,绿色子像素的数量是红色和蓝色的两倍,您的颜色选择可能在这些设备上超出了色域。


SOLUTION


所有设备都以不同的强度挑选颜色。你无能为力。它的硬件在其中渲染图像和颜色。如果你想要所有设备之间的一致性,你必须 calibrate your monitor.

所以这看起来像是 tintMode 的问题。颜色看起来不同的原因是透明度。默认情况下,Drawables in Android have a tintMode of SRC_IN,这意味着它们将保留其颜色,但在渲染过程中使用它们下方任何内容的 alpha。从外观上看,蓝色的下面还有不是100%不透明的视图。

要解决此问题,您可以将 tintMode 显式设置为 SRC_OVER 之类的内容,这将保持您设置的 alpha 不变。另一个选项不是将背景设置为颜色,而是将其设置为具有纯色填充的 Shape Drawable。这将确保视图是不透明的并且具有一致的颜色。