首页 > 解决方案 > 如何在画布绘图期间忽略 Android 中的高对比度辅助功能选项?

问题描述

我有一个自定义视图,我想要有彩色文本。但是当high contrast启用该选项时,画布会忽略所有绘画的颜色设置并将文本绘制为黑白(drawText重载)

有可能检测是否启用了此选项(通过反射等)。对于某些观点,有没有办法忽略它?

PS我知道设置中的开关,这不是解决方案。

标签: androidcanvas

解决方案


我的解决方法如下所示:

public void drawTextWithoutHighContrastEffects(Canvas canvas, String text, float x, float y, Paint paint)
{
    if (isHighContrastTextEnabled)
    {
        Path path = new Path();
        paint.getTextPath(text, 0, text.length(), x, y, path);
        canvas.drawPath(path, paint);
    } else {
        canvas.drawText(text, x, y, paint);
    }
}

请注意,这是一个简化的解决方案,例如,path不应为每个绘制操作重新创建实例,创建一次然后重用它。还应paint正确设置对象的FILL样式,以使使用绘制的文本drawPath看起来与绘制的相同drawText

flag的值isHighContrastTextEnabled来自这里:Detect if 'High contrast' is enabled in Android accessibility settings


推荐阅读