Нарисуйте текст StaticLayout, включая HTML-код, на холсте Android - PullRequest
0 голосов
/ 17 марта 2019

Позвольте многострочному тексту HTML, как этот: <div style="color: red;"><b>foo</b></div>.Он может быть многострочным, потому что хотя бы одно из этих условий выполняется: а) текст очень длинный или б) имеется хотя бы одно <br />.

Цель состоит в том, чтобы нарисовать этот текст на холсте,который построен с использованием Bitmap.

Минимальный код, который я написал, следующий (android.graphics.Canvas, android.graphics.drawable.BitmapDrawable ...):

private BitmapDrawable addTextOnImage(BitmapDrawable bitmapDrawable) {
    Bitmap bitmap = ...;
    String caption = rich_editor_caption.getHtml();
    StaticLayout mTextLayout_caption = StaticLayout.Builder.obtain(caption, 0, caption.length(), mTextPaint, bitmap.getWidth()).build();
    Bitmap final_bitmap = Bitmap.createBitmap(bitmap.getWidth(), mTextLayout_caption.getHeight() + bitmap.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(final_bitmap);
    mTextLayout_caption.draw(canvas);
    return new BitmapDrawable(getActivity().getResources(), final_bitmap);
}

Если переменная caption содержит HTML-код, последний не будет интерпретироваться.Другими словами: теги будут фактически отображаться в полученном изображении.

Можно ли заставить приложение Android интерпретировать этот код?

1 Ответ

0 голосов
/ 17 марта 2019
StaticLayout.Builder.obtain.obtain(caption, 0, caption.length(), mTextPaint, bitmap.getWidth()).build() ;

В документе первым параметром является "source CharSequence: Текст, который должен быть размечен, необязательно с интервалами. Это значение никогда не должно быть нулевым." (https://developer.android.com/reference/kotlin/android/text/StaticLayout.Builder#obtain)

Так что непередайте ему строку кода html, но последовательность символов с интервалами, представляющими интерпретированный html. Для этой цели следует использовать Html.fromHtml (https://developer.android.com/reference/android/text/Html.html#fromHtml(java.lang.String,%20int)).

Примечание: этот ответнеполный: HTML, такой как <b style="color: rgb(255, 0, 0);">Rrr</b>, будет интерпретироваться без цвета, даже если используется флаг Html.FROM_HTML_OPTION_USE_CSS_COLORS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...