Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 谷歌喜欢逐页阅读的方式_Android_Android Layout_Android Viewpager_Textview_Adjustable - Fatal编程技术网

Android 谷歌喜欢逐页阅读的方式

Android 谷歌喜欢逐页阅读的方式,android,android-layout,android-viewpager,textview,adjustable,Android,Android Layout,Android Viewpager,Textview,Adjustable,我正在学习如何为我的应用程序实现一页阅读风格,就像在GoogleCurrents中一样 内容(文本)根据屏幕大小进行调整,没有滚动,没有缩放。 溢出的文本在下一页中。(我知道它正在使用ViewPager。) 以下是屏幕截图: 我的问题是: 如何使内容(文本)适合(调整)屏幕? 如何将溢出的文本自动解析到下一屏幕?(以便用户 只需在屏幕之间滑动即可阅读。) 另外,我正在考虑对内容使用TextView。(我认为谷歌目前使用的是WebView)我的应用程序不需要使用WebView。textvie

我正在学习如何为我的应用程序实现一页阅读风格,就像在GoogleCurrents中一样

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

以下是屏幕截图:

我的问题是:

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

另外,我正在考虑对内容使用TextView。(我认为谷歌目前使用的是WebView)我的应用程序不需要使用WebView。textview有可能实现这样的功能吗?

我用几个textview实现了类似的功能。首先,我创建了一个ViewPager,用于在文本视图之间进行切换。 之后,我将长文本分成若干块,每页一块。 要获取页面的文本,请使用此函数:

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电视=新的TextView(上下文)//创建文本视图
int width=mtv.getWidth()-tv.getPaddingLeft()-tv.getPaddingRight()//获取文本的宽度
int lHeight=tv.getLineHeight();获取线高度
int height=((视图)mtv.getParent()).getHeight()-tv.getPaddingBottom()-tv.getPaddingTop();//获取文本高度
int linescont=(int)数学地板((浮动)高度/高度);//获取第页上的行数
字符串tmpText=“”;
对于(int i=0;i0)
索引=t.lastIndexOf(“”+1;//当行以“”开头时的情况
text=text.substring(索引)//为下一次迭代获取文本
t=t.子串(0,索引);
tmpText+=t;
}
//我使用Spanable字符串作为链接和一些样式。重新计算新索引的跨度
SpannableString s=新的SpannableString(tmpText);
对象os[]=span.getspan(offset,offset+tmpText.length(),Object.class);
用于(对象o:os)
{
int start=跨距。getSpanStart(o)-偏移量;
int end=跨距。getSpanEnd(o)-偏移量;
如果(开始<0)
开始=0;
如果(结束>=s.length())
结束=s.长度()-1;
s、 设置跨距(o,开始,结束,跨距。getSpanFlags(o));
}
偏移量+=tmpText.length();
while(text.startsWith(“”)| text.startsWith(“\n”))
{
text=text.子字符串(1);
offset++;
}
tv.setText(s);

我认为,谷歌使用的是文本视图,而不是网络视图。阅读有关跨距和可跨距的内容。它能够在一个文本视图中显示不同样式的链接、图像和文本。

您知道如何在不使用网络视图的情况下调整文本吗?谢谢哦,等待已久的答案来了!:)谢谢你的回答@Demand。今晚我要测试一下!:)事实上,谷歌确实使用了WebView来回流文本。我转储视图层次结构来检查它。您好,您可以添加更多代码来回答,给我正确的方向吗?因为我还是初学者,所以我没有得到你想要展示的所有东西。变量“mtv”是文本视图吗?什么是“文本(字符串资源?)、“跨距(或跨距?)”和“偏移量”?我应该在哪里声明这些变量?