繁体   English   中英

如何在Viewpager Fragment中使整个屏幕可滚动

[英]How to make whole screen scrollable in Viewpager Fragment

我在scrollview中有网格视图和Listview(包括分页)。

这是个人滚动,但我需要整个屏幕可滚动与分页。 我试图使用NestedListView和ExpandableHeightListView但不能正常工作。

任何建议都会感激不尽。

enter codXML::
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/swipeContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ScrollView
    android:id="@+id/scrollView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clipToPadding="false"
    android:fillViewport="true"
    android:paddingBottom="75dp">

    <RelativeLayout
        android:id="@+id/root_rl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="beforeDescendants"
        android:focusable="true"
        android:focusableInTouchMode="true">

        <TextView
            android:id="@+id/all_tpcs_heading"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/bg_horizantal_magzine_listview"
            android:padding="@dimen/ten_dp"
            android:text="all topics"
            android:textAllCaps="true"
            android:textSize="14sp" />

        <com.healthyliving.live.utils.ExpandableHeightGridView
            android:id="@+id/topicsGrid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/all_tpcs_heading"
            android:layout_marginTop="@dimen/six_dp"
            android:clipChildren="true"
            android:gravity="center"
            android:horizontalSpacing="@dimen/six_dp"
            android:isScrollContainer="false"
            android:numColumns="2"
            android:stretchMode="none"
            android:verticalSpacing="@dimen/six_dp" />

        <TextView
            android:id="@+id/rcnt_artcls_heading"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/topicsGrid"
            android:layout_marginTop="@dimen/six_dp"
            android:paddingBottom="@dimen/ten_dp"
            android:paddingLeft="@dimen/ten_dp"
            android:paddingRight="@dimen/ten_dp"
            android:paddingTop="@dimen/sixteen_dp"
            android:text="Recent articles"
            android:textAllCaps="true"
            android:textSize="14sp" />

        <ListView
            android:id="@+id/recent_articles_listview"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:layout_below="@+id/rcnt_artcls_heading"
            android:dividerHeight="@dimen/list_view_divider" />

        <ProgressBar
            android:layout_centerHorizontal="true"
            android:layout_alignParentBottom="true"
            android:id="@+id/load_progreebar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:indeterminateDrawable="@drawable/my_progress_indeterminate"
            android:visibility="gone" />
    </RelativeLayout>
</ScrollView>

分段::

recentArticleAdapter = new ExploreRecentArtilcesAdapter(getActivity(),      featuredArticles);
    mRecentArticles.setAdapter(recentArticleAdapter);

使用下面给出的自定义列表和网格视图,而不是布局xml文件中的默认ListViewGridView

自定义列表视图: -

public class CustomListView extends ListView {

    public CustomListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomListView(Context context) {
        super(context);
    }

    public CustomListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

自定义GridView: -

public class CustomGridView extends GridView {

    public CustomGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomGridView(Context context) {
        super(context);
    }

    public CustomGridView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

在这种方法中,如果您发现垂直滚动和水平滑动有任何困难(因为您有查看分页器)使用下面的自定义ScrollView类而不是布局xml文件中的默认滚动视图。

public class VerticalScrollView extends ScrollView {

    private float xDistance, yDistance, lastX, lastY;
    public VerticalScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                xDistance = yDistance = 0f;
                lastX = ev.getX();
                lastY = ev.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                final float curX = ev.getX();
                final float curY = ev.getY();
                xDistance += Math.abs(curX - lastX);
                yDistance += Math.abs(curY - lastY);
                lastX = curX;
                lastY = curY;
                if(xDistance > yDistance)
                    return false;
        }

        return super.onInterceptTouchEvent(ev);
    }
}

使用所有这些自定义视图类的方式与在当前实现中使用com.healthyliving.live.utils.ExpandableHeightGridView自定义视图的方式相同。 希望这个答案会对你有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM