相关疑难解决方法(0)

如何为Paint.setTextSize()设置单位

是否可以更改单位Paint.setTextSize()?据我所知,它是像素,但我喜欢在DIP中设置文本大小以支持多屏幕.

java android view

55
推荐指数
3
解决办法
4万
查看次数

StaticLayout如何在Android中使用?

我需要构建自己的自定义,TextView所以我一直在学习StaticLayout在画布上绘制文本.这比Canvas.drawText()直接使用更好,或者说文档说的.但是,文档没有给出任何示例.只有模糊的参考才能StaticLayout.Builder成为更新的方法.

我在这里找到了一个例子,但似乎有点过时了.

我终于工作了,但是我在下面添加了我的解释.

android text canvas android-custom-view staticlayout

22
推荐指数
1
解决办法
1万
查看次数

如何在Android中使用Canvas.drawText绘制跨区字符串

我想画SpannedString一个Canvas.

在此输入图像描述

SpannableString spannableString = new SpannableString("Hello World!");
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
BackgroundColorSpan backgroundSpan = new BackgroundColorSpan(Color.YELLOW);
spannableString.setSpan(foregroundSpan, 1, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(backgroundSpan, 3, spannableString.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
Run Code Online (Sandbox Code Playgroud)

上面的例子是使用a绘制的TextView,而a又使用a Layout来绘制带有跨度的文本.我知道使用a Layout向画布绘制文本的推荐方法.但是,我从头开始制作自己的文本布局,所以我需要自己实现.

做这样的事情是行不通的

canvas.drawText(spannableString, 0, spannableString.length(), 0, 0, mTextPaint);
Run Code Online (Sandbox Code Playgroud)

因为drawText只从中获取文本spannableString,而不是任何跨度.绘图颜色分别处理TextPaint.

如何使用canvas.drawText(或drawTextRun)绘制跨度信息(特别是前景和背景颜色)?

有关

计划解决方案

我打算直接做一个自我回答,但事实证明这比我想象的更难.所以我会先发帖,然后在我弄清楚的时候添加一个答案.(我当然欢迎任何人先回答.)

这是我到目前为止的作品:

android canvas paint drawtext spannable

6
推荐指数
1
解决办法
3057
查看次数