android - 如何为旧版 Android API 实现 TextView 行距方法?

标签 android textview android-api-levels

之前,我在 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 codeonCreate() 中)和之后(在 onGlobalLayout() 初始化之后的 mPagination 中或在 update() 方法中)查看它们的值。

传递TextView所有参数的思路到Pagination's构造函数是使用 Layout 的相同配置的实例两者的背后的类TextViewPagination 。因此,不要将参数传递给 Pagination's先前从 TextView 检索的构造函数与 getters ,您可以获得相同配置的 Layout通过将您想要的任何值传递给 Pagination并将相同的值设置为 TextView适当的setters API version 8 中已经满足的.

关于android - 如何为旧版 Android API 实现 TextView 行距方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32546288/

相关文章:

android-studio - 未找到 Android API 23 平台的源代码 (Android Studio 2.0)

java - Android Studio 无法在 Mac OS Snow Leopard 上打开 - java.lang.NoClassDefFoundError : java. awt.Toolkit

android - 使用 cordova build --release android 时出现 ionic build android 错误

android - Dagger 和 butterknife

android-studio - 安卓 : Unable to set getContext() in non-static method - requires API Level 23

android - 无法在android应用程序API级别22中使用java功能接口(interface)的Consumer<T>

android - 多列 ListView 的搜索 View

java - 从字符串中删除 URL 前缀(http :/, www 等)

android - 需要让TextView自动垂直滚动

android - 单击 TextView 将电子邮件发送到特定的电子邮件 ID