一些设备上,Android 渲染蓝色阴影错误

21
我在多种设备上运行一个应用程序,其中两个设备上某个特定的蓝色看起来不对。请查看附图。有什么想法吗? 如果我将颜色替换为另一种而不做其他更改,则一切都正常。 enter image description here 编辑注意:原帖说明项目资源中只有一个colors.xml文件,并且颜色只定义了一次。该颜色由名称(@color/pbr)定义,值为#447AD4。上述截图的布局始终使用相同的资源名称,但呈现为不同的颜色。

你确定这两种颜色的十六进制代码完全相同吗? - eriuzo
是的,我在我们应用程序中到处使用一个颜色资源来表示这种蓝色。这种颜色的十六进制代码是#447AD4。当我使用不同的颜色时,在所有设备上一切都如预期的那样。 - vera
你能否提供一个最小化的工作示例呢?(好吧,在这种情况下,“工作”意味着“不工作” :-) ) - PhilLab
这两个“损坏的”截图是来自比其他所有设备更大的设备。当你说可以设置不同的颜色时,你是怎么做的?你是改变<color name="my_color">#447AD4</color>的值,还是改变你的布局以color="@color/my_other_color"的方式呈现?如果是第二种选项,你肯定可以在某个xxhdpixxxhdpi资源文件中定义不同的颜色。 - Adam S
要明确一点,我有一个color.xml文件,其中包含所有我的颜色,并且只有一个定义这种颜色(#447AD4),它在整个应用程序中都被使用。 - vera
6个回答

6
所以这看起来像是涂色模式的问题。颜色看起来不同的原因是透明度。默认情况下,Android中的可绘制对象具有SRC_IN的着色模式,这意味着它们将保留其颜色,但在渲染期间使用其下方任何内容的alpha值。从外观上看,蓝色视图下面有不完全不透明的视图。
要解决此问题,您可以将tintMode明确设置为类似于SRC_OVER的内容,这将保持您设置的alpha值不变。另一个选择是将背景设置为形状Drawable,并填充实心颜色,而不是将其设置为颜色。这将确保视图不透明并具有一致的颜色。

4

我使用paint.net验证了文本颜色“搜索您的食物”在每个设备上都相同,这排除了设备全局阴影或截图检索过程中的错误。

  • 对于任何想要验证这一点的人:请注意检查字母中间的颜色,例如f交叉点的中心,以便不会得到反锯齿颜色。
  • 更新:这表明,不同区域颜色的差异不是设备全局颜色处理问题,因为至少文本颜色是相同的。

确保您没有指定以下内容:

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

适用于不同的Android版本/屏幕密度/屏幕尺寸


+1 链接,将有助于未来的读者,而不仅仅是提问者,但问题是关于文本所在区域的颜色,而不是文本本身... - Michael Hoffmann
1
我添加了一个编辑以使观点更清晰 - 我刚刚排除了一些奇怪的设备特定的颜色色调。 - PhilLab
你能否发布你的color.xml、styles.xml和layout.xml文件,这样我可以更好地查看代码?我认为主题可能存在问题。 - ap6491
我和原开发人员交谈了一下。看起来布局的三个蓝色部分都链接到同一个资源名称(@color/pbr)。此屏幕只有一个布局文件。没有其他配置定义了这个屏幕,而且屏幕三次定义了相同的颜色,但在某些手机上它们显示为不同的颜色。 - Gennadiy
您还可以为不同的配置重新定义颜色,因此链接到相同的资源名称仍然可以产生不同的颜色。 - PhilLab
开发者在原始帖子(评论)中澄清,代码库中只存在一个@color/pbr的定义。此外,如果您仔细观察屏幕截图的顶部两个部分,您会看到搜索栏左/右侧的颜色变化。那是一个具有平坦背景的单元格。有什么建议吗? - Gennadiy

2
你检查过你引用的资源(颜色)是否使用配置限定符为不同的屏幕分辨率提供了多次吗?
例如,请确保在 values-mdpi 文件夹或 values-xxhdpi 文件夹中没有多个 colors.xml 或 styles.xml。如果它被引用在多个文件夹中,那就是你的问题所在。

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


2

您可能已经在

res/values/style.xml

中自定义了主题。同样地,您需要在以下文件中进行类似的自定义:

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

(如果这些文件夹不存在,请创建 values-v11values-v14 文件夹,并将您的 style.xml 复制粘贴到其中。如果文件夹和其内部的 style.xml 已经存在,则请添加您需要的内容,确保不要通过覆盖文件来删除任何重要内容。)

来源


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

这并不能解释为什么同一台显示器上的图片会有差异。 - Nepoxx
1
@Nepoxx 图片显示在同一台显示器上存在差异,因为这些是由设备屏幕拍摄的屏幕截图,在截图图像中实现和生成了错误的颜色阴影。 - Nihal Singh
1
设备的屏幕不会影响截图,除非有软件影响渲染。 - Nepoxx

0

原因


这并非是一个“万能”的原因,但其中一个可能的原因是驱动程序。某些芯片组制造商在更新其图形驱动程序方面做得特别糟糕,这使得应用程序、游戏和任何图形内容在手机上的颜色不一致。开发人员可能会在各种Android设备上遇到完全不同的配色方案,与他们预期的完全不同。

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

这个问题可能是由于PenTile屏幕引起的,主要区别在于红、绿和蓝子像素与普通显示器不同。

基本上,与每个像素都有相同大小的红、绿和蓝子像素不同,PenTile像素只有红绿或蓝绿子像素。为了平衡亮度,红色和蓝色比绿色大。 因为你的手机上绿色子像素是红色和蓝色的两倍,所以你的颜色选择可能在这些设备上超出了色域。


SOLUTION


所有设备在不同强度下选择颜色。你无法做太多关于它。它的硬件渲染图像和颜色。如果你想要所有设备之间的一致性,你必须校准你的显示器


请点击链接以更好地理解问题和解决方案。 - Arjun Chaudhary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接