RichText icon indicating copy to clipboard operation
RichText copied to clipboard

底部会多出一段间距

Open pbaiyy opened this issue 5 years ago • 12 comments

image 详细教程几个字以上是富文本,使用的富文本是demo里面的html那段,两者之间会多出一段间距。感觉体验不好

pbaiyy avatar Jul 31 '19 03:07 pbaiyy

同样碰到类似问题了,想问下解决了吗?

YangShaoXiong avatar Aug 29 '19 03:08 YangShaoXiong

只能等待大神解答了。。

pbaiyy avatar Aug 29 '19 06:08 pbaiyy

同样碰到类似问题了,有解决方案吗?

RunRunAllen avatar Oct 17 '19 02:10 RunRunAllen

暂时不知道怎么解决。

YangShaoXiong avatar Oct 18 '19 12:10 YangShaoXiong

这个应该是 内容页的标签换行问题,过滤一下会解决部分问题

RunRunAllen avatar Oct 21 '19 03:10 RunRunAllen

SpannableStringBuilder末尾有"\n\n",自己手工移除下吧

tinyvampirepudge avatar Nov 24 '19 00:11 tinyvampirepudge

SpannableStringBuilder末尾有"\n\n",自己手工移除下吧

麻烦问一下,这个末尾换行符,要怎么过滤呢。我通过RichText解析了html,还要怎么去过滤呢?提前谢谢了

YangShaoXiong avatar Dec 09 '19 04:12 YangShaoXiong

解决了,谢谢@tinyvampirepudge的解决办法。在HtmlToSpannedConverter类中的convert方法中过滤下\n。我用的是作者的html解析库。

Spanned convert() {

        mReader.setContentHandler(this);
        try {
            mReader.parse(new InputSource(new StringReader(mSource)));
        } catch (IOException e) {
            // We are reading from a string. There should not be IO problems.
            throw new RuntimeException(e);
        } catch (SAXException e) {
            // TagSoup doesn't throw parse exceptions.
            throw new RuntimeException(e);
        }

        // Fix flags and range for paragraph-type markup.
        Object[] obj = mSpannableStringBuilder.getSpans(0, mSpannableStringBuilder.length(), ParagraphStyle.class);
        for (Object anObj : obj) {
            int start = mSpannableStringBuilder.getSpanStart(anObj);
            int end = mSpannableStringBuilder.getSpanEnd(anObj);

            // If the last line of the range is blank, back off by one.
            if (end - 2 >= 0) {
                if (mSpannableStringBuilder.charAt(end - 1) == '\n' &&
                        mSpannableStringBuilder.charAt(end - 2) == '\n') {
                    end--;
                }
            }
            if (end == start) {
                mSpannableStringBuilder.removeSpan(anObj);
            } else {
                mSpannableStringBuilder.setSpan(anObj, start, end, Spannable.SPAN_PARAGRAPH);
            }
        }
        // 如果内容最后以\n\n结尾,那么去除一个,避免底部出现大部分空白
        if (mSpannableStringBuilder.length() > 2) {
            if (mSpannableStringBuilder.charAt(mSpannableStringBuilder.length()-1) == '\n' &&
                    mSpannableStringBuilder.charAt(mSpannableStringBuilder.length() - 2) == '\n') {
                mSpannableStringBuilder.delete(mSpannableStringBuilder.length() - 1, mSpannableStringBuilder.length());
            }
        }
        return mSpannableStringBuilder;
    }

YangShaoXiong avatar Dec 09 '19 07:12 YangShaoXiong

谢谢@tinyvampirepudge的解决办法。在HtmlToSpannedConverter类中的convert方法中过滤下\n。我用的是作者的htm

你这个过滤的方法,是改他的源码吗?还是另外的过滤方法

pbaiyy avatar Dec 09 '19 08:12 pbaiyy

我是用的https://github.com/zzhoujay/Html 作者写的html解析库,android官方的html解析库,也有内容末尾出现大段空白的问题。其他的过滤方法暂时还没想到。

YangShaoXiong avatar Dec 09 '19 08:12 YangShaoXiong

我是用的https://github.com/zzhoujay/Html 作者写的html解析库,android官方的html解析库,也有内容末尾出现大段空白的问题。其他的过滤方法暂时还没想到。

我也有用他的解析库,还是会留白啊。你上面处理的那段,是放在哪里处理的?

pbaiyy avatar Dec 09 '19 09:12 pbaiyy

去html解析库中找到HtmlToSpannedConverter类,在这个类中找到convert方法,在这个方法的最后把这段代码加上

// 如果内容最后以\n\n结尾,那么去除一个,避免底部出现大部分空白
        if (mSpannableStringBuilder.length() > 2) {
            if (mSpannableStringBuilder.charAt(mSpannableStringBuilder.length()-1) == '\n' &&
                    mSpannableStringBuilder.charAt(mSpannableStringBuilder.length() - 2) == '\n') {
                mSpannableStringBuilder.delete(mSpannableStringBuilder.length() - 1, mSpannableStringBuilder.length());
            }
        }

YangShaoXiong avatar Dec 10 '19 02:12 YangShaoXiong