
比如会涉及到前几个字 font-size 为 20px ,其他的字为 14px ,然后自动换行之类的需求。除了在 Java 层创建 TextView 然后强制调用其 measure 函数外,还有其他更便且可在 c/c++层,非主线程做排版和测试的方法吗?
1 CodingPuppy 2015 年 12 月 3 日 据本菜所知, textview 也是通过 canvas.drawtext 调用到 native 层处理的字体纹理渲染,但是排版貌似是在 java 层做的吧?。。貌似有个叫 Layout.java 的类 |
2 zs53dada 2015 年 12 月 3 日 java 层难道不不比 c++简单吗。。 Html.from(把你的文字设置称为富文本); 直接 settext(html.from(xxx)); |
3 aa23 2015 年 12 月 3 日 via Android 同意二楼, lz 可以追踪一下 charsquence |
4 faywong8888 OP @zs53dada @CodingPuppy Java 层的方法我都会。现在的关键是 Java 层的方法需要在主线程,没法与 workder 线程的其他逻辑并发,遇到复杂排版的文字时吞吐量比较低,性能差。且我其他的逻辑都在 c 层。 |
5 ffffwh 2015 年 12 月 3 日 via Android 获取字体信息然后自己 /用库去算? |
6 ahtsiu 2015 年 12 月 3 日 Paint 类里有 measureText 方法,不限定在主线程里做 |
7 r00tt 2015 年 12 月 3 日 TextPaint 就可以去测量咯,随便放哪个线程 |
8 binsys 2015 年 12 月 5 日 除非自己绘制文字,否则需要 android 的引擎字体你就必须调用 skia 的东西吧 |
9 Cryse 2015 年 12 月 19 日 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)),这样子去做。 |