在ViewPager中具有垂直滚动页面

时间:2012-01-20 03:12:28

标签: android android-layout android-viewpager

这可能是显而易见的,也是一个完全不需要的帖子,但是我在解决一种允许在VewPager页面上实现垂直滚动功能的方法时遇到了很大的问题,谷歌甚至在这里都没有很少的解决方案。我发现有些人声称要解决这个问题,但他们似乎已经延长和复杂了。因此,对于那些可能正在寻找相同问题的人来说,这是解决方案。有了这个(并且你想要制作比我在这里写的更大的字符串),你将能够垂直滚动内容并在页面之间滑动。

layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v4.view.ViewPager
    android:id="@+id/conpageslider"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
</LinearLayout>

滚动viewpager类

public class ScrollingViewPager extends Activity{

private ViewPager pager;
private Context cxt;
private CharSequence[] pages = {"stuff", "more stuff", "other stuff"};
private PageSlider ps;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.layout);
    cxt = this;
    ps = new PageSlider();
    pager = (ViewPager) findViewById(R.id.conpageslider);
    pager.setAdapter(ps);       

}

public class PageSlider extends PagerAdapter{

    @Override
    public int getCount() {
        return pages.length;
    }

    @Override
    public Object instantiateItem(View collection, int position) {
        ScrollView sc = new ScrollView(cxt);
        sc.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        sc.setFillViewport(true);
        TextView tv = new TextView(cxt);
        tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        tv.setText(pages[position]);
        tv.setPadding(5,5,5,5);         
        sc.addView(tv);
        ((ViewPager) collection).addView(sc);

        return sc;
    }

    @Override
    public void destroyItem(View collection, int position, Object view) {
        ((ViewPager) collection).removeView((ScrollView) view);
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==((ScrollView)object);
    }

}
}

我愿意对代码进行批评,但至少这是一个有效的例子

2 个答案:

答案 0 :(得分:1)

我做了类似的使用viewpager中的片段。 tabWigdet可以显示或不显示。 该示例包含在android-support-v4演示应用程序中。

答案 1 :(得分:1)

我通过将screenOrientation设置为横向,然后将viewpager的内容设置为纵向模式来实现此目的。