在viewpager中垂直滚动

ant*_*des 6 android android-fragments android-viewpager

fragmentPagerAdapter viewpager里面有几个片段类.因此,这viewpager可以通过滑动水平向左和向右滚动.问题是,在每个页面上,我的值超出了页面大小,我需要垂直滚动才能看到它们.但我无法启用任何垂直滚动.我删除了所有scrollview的东西,让我的代码进入工作状态.(我想要像Android应用程序商店那样:水平滚动分类,垂直滚动查看应用程序.)

这是我的代码:

MyFragmentPagerAdapter:

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

        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:isScrollContainer="true">

            <android.support.v4.view.PagerTitleStrip
                android:id="@+id/pager_title_strip"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="top"
                android:background="#33b5e5"
                android:paddingBottom="4dp"
                android:paddingTop="4dp"
                android:textColor="#fff" />
        </android.support.v4.view.ViewPager>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

需要垂直滚动的片段活动:

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

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="10dp"
        android:text="Last fill-up spent :"
        android:textSize="15dp" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="15dp"
        android:text="Month total spent :"
        android:textSize="15dp" />

    <TextView
        android:id="@+id/currentMoneySpentText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/textView2"
        android:layout_marginLeft="24dp"
        android:layout_toRightOf="@+id/textView1"
        android:textSize="15dp" />

    <TextView
        android:id="@+id/monthTotalSpentText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView2"
        android:layout_alignLeft="@+id/currentMoneySpentText"
        android:textSize="15dp" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_below="@+id/textView2"
        android:layout_marginTop="15dp"
        android:text="Year total spent :"
        android:textSize="15dp" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView3"
        android:layout_below="@+id/textView3"
        android:layout_marginTop="15dp"
        android:text="Since 1st addition :"
        android:textSize="15dp" />

    <TextView
        android:id="@+id/yearTotalSpentText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/textView4"
        android:layout_alignLeft="@+id/monthTotalSpentText"
        android:textSize="15dp" />

    <TextView
        android:id="@+id/firstTotalSpentText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView4"
        android:layout_alignLeft="@+id/yearTotalSpentText"
        android:textSize="15dp" />

    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView6"
        android:layout_below="@+id/textView6"
        android:layout_marginTop="1dp"
        android:text="since last addition :"
        android:textSize="15dp" />

    <TextView
        android:id="@+id/textView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView7"
        android:layout_below="@+id/textView7"
        android:layout_marginTop="15dp"
        android:text="Distance covered"
        android:textSize="15dp" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

以下是我的片段类的前几行,它们是相关的:

public class MyFragmentDetails extends Fragment {

private RelativeLayout ll;
private FragmentActivity fa;
DBAdapter db;

// MyFragmentFuel fFuels;
private String carSelected, m, y, lowestDistance, highestDistance;

BroadcastReceiver receiver;
int highestDay = 0;
int lowestDay = 31;

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
}

@SuppressWarnings("static-access")
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    fa = super.getActivity();
    super.onCreate(savedInstanceState);
    ll = (RelativeLayout) inflater.inflate(
            R.layout.activity_add_fuel_details, container, false);
Run Code Online (Sandbox Code Playgroud)

mak*_*ata 5

官方小部件ViewPager2支持垂直和水平滚动。

<androidx.viewpager2.widget.ViewPager2 xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/pager" android:orientation="vertical" />

您可以在此处阅读更多内容,也可以从 github 上查看示例项目


Mav*_*ten 0

尝试将内容包装在NestedScrollView. 如果滚动仍然不起作用(在我的情况下不起作用),请尝试添加一个OnTouchListener调用requestDIsallowInterceptTouchEvent(true)其父项(如果您垂直滚动):

scrollView.setOnTouchListener(new View.OnTouchListener() {
        int dragthreshold = 30;
        int downX = 0;
        int downY = 0;

        @Override
        public boolean onTouch(View view, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    downX = (int) event.getRawX();
                    downY = (int) event.getRawY();
                    break;

                case MotionEvent.ACTION_MOVE:
                    int distanceX = Math.abs((int) event.getRawX() - downX);
                    int distanceY = Math.abs((int) event.getRawY() - downY);

                    if (distanceY > distanceX) {
                        view.getParent().requestDisallowInterceptTouchEvent(true);
                    } else if (distanceX > distanceY && distanceX > dragthreshold) {
                        view.getParent().requestDisallowInterceptTouchEvent(false);
                    }
                    break;

                case MotionEvent.ACTION_UP:
                    view.getParent().requestDisallowInterceptTouchEvent(false);
                    break;
            }
            return false;
        }
    });
Run Code Online (Sandbox Code Playgroud)