我知道DynamicLayout是用于其文本已更改的Layout的,而StaticLayout处理不可变的文本。

但是,根据他们的文档,这两个类大多数具有相同的方法:

http://developer.android.com/reference/android/text/StaticLayout.html
http://developer.android.com/reference/android/text/DynamicLayout.html

具体来说,我在setText()类上看不到DynamicLayout方法。

它们之间有什么区别,我如何使用DynamicLayout来计算文本更改的布局?

最佳答案

为了在文本更改时进行更新,DynamicLayout希望将Spannable作为第一个参数。在这种情况下,它将创建内部静态类DynamicLayout.ChangeWatcher的实例,并将其附加到Spannable。反过来,Spannable需要实现Editable才能进行更新。

例子:

SpannableStringBuilder base = new SpannableStringBuilder("a");
DynamicLayout dynamicLayout = new DynamicLayout(base, base, paint, width, Alignment.ALIGN_NORMAL, 1.0, 0, true);
int firstHeight = dynamicLayout.getHeight();
base.append("\nA");
int secondHeight = dynamicLayout.getHeight();

10-06 01:47