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 颜色处理问题,因为至少文本颜色是相同的
确保你们都没有指定
- 不同的布局文件
- 不同颜色的可绘制对象
对于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-v11
和 values-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。这将确保视图是不透明的并且具有一致的颜色。
我是 运行 一个在各种设备上的应用程序,在两个设备上,某种蓝色阴影看起来不对。请看附图。任何想法为什么会这样?
如果我用另一种颜色替换颜色而不做任何其他更改,一切看起来都很好。
编者注:原发帖人指出项目资源中只有一个 colors.xml 文件,颜色定义一次。颜色由名称 (@color/pbr) 定义,值为 #447AD4。上面屏幕截图的布局始终使用相同的资源名称,但呈现为不同的颜色。
使用 paint.net 我可以验证文本颜色 "Search for your food" 在每台设备上都是相同的,这排除了 device-global 阴影或屏幕截图检索过程中的错误
- 对于任何想要验证这一点的人:请注意检查字母中间的颜色,例如f 十字的中心,这样你就不会得到 anti-aliasing 颜色。
- 更新: 这表明不同的区域颜色不是 device-global 颜色处理问题,因为至少文本颜色是相同的
确保你们都没有指定
- 不同的布局文件
- 不同颜色的可绘制对象
对于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-v11
和 values-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。这将确保视图是不透明的并且具有一致的颜色。