之前,我在 stackoverflow 上提出了一个标题为“How to paginate text in Android”的问题,这个问题得到了一个很好的答案,对我帮助很大。现在,我需要将代码移植到较旧的 Android API(如果是 Android API 版本 8)上,这样我就可以在从 Android 2.2 开始的几乎所有 Android 设备上运行我的应用程序。
我遇到的问题是答案中使用的某些方法仅在 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
的源代码,我无法完全理解。
最佳答案
如果我们看一下 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
中或在 update()
方法中)查看它们的值。
传递TextView
所有参数的思路到Pagination's
构造函数是使用 Layout
的相同配置的实例两者的背后的类TextView
和Pagination
。因此,不要将参数传递给 Pagination's
先前从 TextView
检索的构造函数与 getters
,您可以获得相同配置的 Layout
通过将您想要的任何值传递给 Pagination
并将相同的值设置为 TextView
适当的setters
API version 8
中已经满足的.
关于android - 如何为旧版 Android API 实现 TextView 行距方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32546288/