之前,我问过一个题为:" How to paginate text in Android"在stackoverflow上,这导致了一个很好的答案,帮助了我这么多。现在我需要在旧的Android API上移植代码,以及Android API版本8,所以我可以在Android 2.2上开始运行我的应用程序,从Android 2.2开始。
我遇到的问题是答案中使用的某些方法仅适用于Android API 16 +。
mPagination = new Pagination(mText,
mTextView.getWidth(),
mTextView.getHeight(),
mTextView.getPaint(),
mTextView.getLineSpacingMultiplier(),
mTextView.getLineSpacingExtra(),
mTextView.getIncludeFontPadding());
所以,我必须至少实现这些方法:
TextView.getLineSpacingMultiplier()
TextView.getLineSpacingExtra()
TextView.getIncludeFontPadding()
第二个似乎已经被描述为here:
mTextView.getPaint().getFontSpacing()
* mTextView.getLineSpacingMultiplier() + mTextView.getLineSpacingExtra()
但我不知道其他两个是否与2.2相关,如果是,则如何在Android API版本8中实现它们。有一些提示here,使用源代码我无法完全理解的Android TextView
。
答案 0 :(得分:2)
如果我们查看TextView's
来源,我们可以看到以下内容。
在Android 5.0
中:
private float mSpacingMult = 1.0f;
private float mSpacingAdd = 0.0f;
...
private boolean mIncludePad = true;
在Android 2.0
中:
private float mSpacingMult = 1;
private float mSpacingAdd = 0;
...
private boolean mIncludePad = true;
所以默认值相等。
话虽如此,您可以使用Pagination's
构造函数以及适用于API 8+
的默认值:
new Pagination(mText,
mTextView.getWidth(),
mTextView.getHeight(),
mTextView.getPaint(),
1.0f, 0.0f, true);
如果您让用户更改/设置(通过设置菜单)这些参数,则无需再使用getters
。您只需使用TextView's
setters
中的一个设置参数的新值,并将相同的值传递给Pagination's
构造函数。例如,
new Pagination(mText,
mTextView.getWidth(),
mTextView.getHeight(),
mTextView.getPaint(),
newValueOfSpacingMultiplier,
newValueOfSpacingExtra,
newValueOfIncludeFontPadding);
我想说的是,在Android API版本8" 中实现它们并不需要"设置后,参数永远不会在TextView's
生命周期内发生变化。您可以通过简单的测试来检查它。在设置任何文本之前(例如,在sample code的onCreate()
之内)和onGlobalLayout()
之后mPagination
初始化之后或{{1}中,请查看其值方法)。
将update()
的所有参数传递给TextView
构造函数的想法是在Pagination's
和{Layout
的引擎下使用TextView
类的相同配置实例{1}}。因此,不是将参数传递给之前从Pagination
Pagination's
检索到的TextView
构造函数,而是通过传递您想要的任何值来实现相同配置的getters
。 Layout
并使用Pagination
中已满足的TextView
setters
设置相同的值{/ 1}。