安卓小说阅读器实现之一 计算TextView所能容纳的字数

实现一个小说阅读器,首先要把小说内容一页一页的显示在手机界面上,那么问题就来了,如何计算一个页面所能容纳的字数呢?


在这里小星介绍一个基于TextView的实现方法,废话不多说,我们直接上源码:


class ReadingTextView extends TextView {
    public ReadingTextView(Context context) {
        super(context);
    }

    public ReadingTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ReadingTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    
    public int getEstimatedLength() {
        int height = getHeight();
        int lineHeight = getLineHeight();
        int linecount = height / lineHeight;

        float textSize = getTextSize();
        float linewords = getWidth() / textSize;
        return (int) (linecount * linewords);
    }
}

计算公式:总字数 = 行数 x 每一行的字数

计算行数:

简单的说是就通过getHeight()得到TextView的高度(注意TextView必须已经被measured),然后调用getLineHeight()得到TextView里一行文字的高度。

两者相除得到当前TextView最多可容纳多少行,即变量linecount。

计算每一行的字数:

然后调用getTextSize()得到每个字的宽度,通过getWidth()获取TextView的宽度,两者相除即可得到每一行的最大字数,即变量linewords。


最后总字数就是linecount * linewords。


就是这么简单!


不过在具体实现时记得考虑换行符“\n”哦~


大家如有问题可留言讨论哈~


该方法已经在我们的小说阅读软件淘小说中实现,

大家多多支持哈~后续会有更多干货出来哦~


注:

把阅读划屏的代码写成了一个库,后续会有针对该库的具体描述,代码在github上,如下:

https://github.com/martiansutdio/SlidingLayout



你可能感兴趣的:(安卓开发)