比如会涉及到前几个字 font-size 为 20px ,其他的字为 14px ,然后自动换行之类的需求。除了在 Java 层创建 TextView 然后强制调用其 measure 函数外,还有其他更简便且可在 c/c++层,非主线程做排版和测试的方法吗?
1
CodingPuppy 2015-12-03 10:57:55 +08:00
据本菜所知, textview 也是通过 canvas.drawtext 调用到 native 层处理的字体纹理渲染,但是排版貌似是在 java 层做的吧?。。貌似有个叫 Layout.java 的类
|
2
zs53dada 2015-12-03 11:16:56 +08:00
java 层难道不不比 c++简单吗。。 Html.from(把你的文字设置称为富文本); 直接 settext(html.from(xxx));
|
3
aa23 2015-12-03 11:26:27 +08:00 via Android
同意二楼, lz 可以追踪一下 charsquence
|
4
faywong8888 OP @zs53dada
@CodingPuppy Java 层的方法我都会。现在的关键是 Java 层的方法需要在主线程,没法与 workder 线程的其他逻辑并发,遇到复杂排版的文字时吞吐量比较低,性能差。且我其他的逻辑都在 c 层。 |
5
ffffwh 2015-12-03 12:39:24 +08:00 via Android
获取字体信息然后自己 /用库去算?
|
6
ahtsiu 2015-12-03 14:22:49 +08:00
Paint 类里有 measureText 方法,不限定在主线程里做
|
7
r00tt 2015-12-03 14:46:31 +08:00
TextPaint 就可以去测量咯,随便放哪个线程
|
8
binsys 2015-12-05 22:36:49 +08:00
除非自己绘制文字,否则需要 android 的引擎字体你就必须调用 skia 的东西吧
|
9
Cryse 2015-12-19 20:13:18 +08:00 via Android
@faywong8888
用 StaticLayout 或者 DynamicLayout, 在其他线程创建,然后用自定义 View 在主线程画出来就行了。 复杂长文本直接用 TextView 性能很差… |
10
faywong8888 OP @Cryse
首先非常感谢你的回答。 React Native 里边的文字排版就是用的 StaticLayout 。 但是这样弄我需要提前将富文本自己一个个 parse 然后转成 SpannableString 的吧? |
11
faywong8888 OP @Cryse 相当于 new StaticLayout(Html.from(html)),这样子去做。
|