ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – Google Currents喜欢逐页阅读风格

2019-06-29 21:15:31  阅读:178  来源: 互联网

标签:android android-layout android-textview android-viewpager adjustable


我正在学习如何为我的应用程序实现单页阅读风格,例如Google Currents.

内容(文本)根据屏幕大小进行调整,没有滚动,没有缩放.
溢出的文本在下一页. (我知道它正在使用ViewPager.)

这是屏幕截图:

我的问题是:

>我如何将内容(文本)适合(调整)到屏幕上?
>如何自动解析溢出的文本到下一个屏幕? (以便用户
只需在屏幕之间滑动即可阅读.)

另外,我正在考虑使用TextView作为内容. (GoogleCurrent使用WebView,我认为)我的应用程序不需要使用WebView. textview是否可以实现这样的目标?

解决方法:

我用几个TextView实现了这样的东西.首先,我创建了一个ViewPager,用于在TextView之间进行swyping.
之后我将长文本分成几个块,每页一个.
要获取页面的文本,我使用此函数:

TextView tv = new TextView(context); //creating text view
        int width = mtv.getWidth() - tv.getPaddingLeft()-tv.getPaddingRight(); //get width for text
        int lHeight = tv.getLineHeight(); getting line height
        int height = ((View)mtv.getParent()).getHeight() - tv.getPaddingBottom()-tv.getPaddingTop(); // getting height of text
        int linesCount = (int)Math.floor((float)height/lHeight); // get line count on page
        String tmpText = "";
        for (int i =0; i<linesCount; i++)
        {
            int index = Math.min(mtv.getLayout().getPaint().breakText(text, true, width, new float[0]), text.indexOf('\n')+1); // breaking text to lines. To use this you need mtv to be measured
            String t = text.substring(0, index); //getting text for this textview
            if (index+1 < text.length() && (text.charAt(index+1)!=' ' || text.charAt(index+1)!='\n') && t.lastIndexOf(" ")>0) 
                index = t.lastIndexOf(" ")+1; // hack for situation when line starts with " "

            text = text.substring(index);//getting text for next iteration
            t = t.substring(0, index);
            tmpText+=t;
        }
        //I use spannable string for links and some styles. Recalculating spans for new indexes
        SpannableString s = new SpannableString(tmpText);
        Object os[] = spanned.getSpans(offset, offset + tmpText.length(), Object.class);
        for (Object o: os)
        {
            int start = spanned.getSpanStart(o)-offset;
            int end = spanned.getSpanEnd(o)-offset;
            if (start < 0)
                start = 0;
            if (end>=s.length())
                end = s.length()-1;
            s.setSpan(o, start, end, spanned.getSpanFlags(o));
        }
        offset+=tmpText.length();

        while (text.startsWith(" ") || text.startsWith("\n"))
        {
            text = text.substring(1);
            offset++;
        }
        tv.setText(s);

我认为,谷歌使用TextView,而不是webView.阅读Spanned和Spannable.它能够在一个textView中显示具有不同样式的链接,图像和文本.

标签:android,android-layout,android-textview,android-viewpager,adjustable
来源: https://codeday.me/bug/20190629/1329633.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有