android.text.html (fromHtml): отображать встроенные цвета CSS - PullRequest
1 голос
/ 17 марта 2019

У меня есть такой текст: <b style="color: rgb(255, 0, 0);">Test</b>, который передается вызову Html.fromHtml, который возвращает Spanned, используемый в StaticLayout, нарисованном на Android Canvas, привязанном к Bitmap.

Нарисованное изображение содержит жирный текст.Но последний не окрашен в красный цвет, хотя это определяется встроенным стилем CSS.

Я знаю, что опция Html.FROM_HTML_OPTION_USE_CSS_COLORS существует, но (как я мог неявно прочитать в документации) она неиметь эту цель.

Источники

Примечание: в следующем коде, mTextPaint.setColor(Color.WHITE); прокомментирован.Текст окрашен в черный, на черном фоне черный.Но не в красном.Так что проблема не в том, что mTextPaint.setColor переопределит мой цвет встроенного стиля CSS.

private BitmapDrawable addTextOnImage(BitmapDrawable bitmapDrawable) {

    Spanned caption = Html.fromHtml("<b style=\"color: rgb(255, 0, 0);\">Test</b>", Html.FROM_HTML_MODE_LEGACY);

    Bitmap bitmap_largest_image = bitmapDrawable.getBitmap().copy(Bitmap.Config.ARGB_8888, true);

    TextPaint mTextPaint = new TextPaint();
    //mTextPaint.setColor(Color.WHITE);
    mTextPaint.setTextSize(30);
    StaticLayout mTextLayout_caption = StaticLayout.Builder.obtain(caption, 0, caption.length(), mTextPaint, bitmap_largest_image.getWidth()).build();

    Paint backgrounds_paint = new Paint();
    backgrounds_paint.setColor(Color.BLACK);
    backgrounds_paint.setStyle(Paint.Style.FILL);

    Bitmap final_bitmap = Bitmap.createBitmap(bitmap_largest_image.getWidth(), mTextLayout_caption.getHeight() + bitmap_largest_image.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(final_bitmap);
    canvas.drawRect(0, 0, bitmap_largest_image.getWidth(), mTextLayout_caption.getHeight(), backgrounds_paint);
    mTextLayout_caption.draw(canvas);
    canvas.drawBitmap(Bitmap.createScaledBitmap(bitmap_largest_image, bitmap_largest_image.getWidth(), bitmap_largest_image.getHeight(), false),  0, mTextLayout_caption.getHeight(), new Paint());

    return new BitmapDrawable(getActivity().getResources(), final_bitmap);
}
...