比如会涉及到前几个字 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)),这样子去做。 |