0

我正面臨一個奇怪的問題。我有一個帶有兩個RecyclerView的xml和一個帶有NestedScrollview內的圓形頁面指示器的ViewPager。我已經使用layout_weight和weightSum在屏幕上顯示小部件。 RecyclerView的其中一個水平佈局正在水平滾動。我想要實現單個垂直滾動,但不幸的是它不起作用。帶有多個RecyclerView和ViewPager的內容不能在內部滾動NestedScrollView

我用 「的應用程序:layout_behavior =」 @字符串/ appbar_scrolling_view_behavior」在XML和 「recyclerview.setNestedScrollingEnabled(假)」,在Java代碼

這裏是我的fragment_home.xml

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/scrollview" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_gravity="fill_vertical" 
android:fillViewport="true" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:context="com.e2e.qnamo.fragment.HomeFragment"> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:weightSum="10" 
    android:descendantFocusability="blocksDescendants"> 

    <include 
     layout="@layout/layout_pager_indicator" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="3"/> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv_hot_topic" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_marginTop="20dp" 
     android:layout_weight="2" 
     tools:listitem="@layout/hot_topic_row" /> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv_category" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_marginTop="20dp" 
     android:layout_weight="5" 
     tools:listitem="@layout/category_row"/> 


</LinearLayout> 

這裏是我的layout_pager_indicator.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 

<android.support.v4.view.ViewPager 
    android:id="@+id/bannerViewPager" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    tools:listitem="@layout/viewpager_indicator_single_item" /> 

<com.e2e.qnamo.widget.CirclePageIndicator 
    android:id="@+id/pager_indicator" 
    style="@style/CustomCirclePageIndicator" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:layout_gravity="center|bottom"/> 

回答

1

似乎每個人都忙於別的地方:)無論如何,我設法找到自己的解決方案。

有這造成問題,有三種潛在的問題:在父佈局

  1. 使用 「weightSum」 和
  2. ViewPager佈局
  3. ViewPager默認情況下需要整個屏幕。

我已經使用「weightSum」來控制ViewPager的大小並顯示其他兩個Recyclerview。要刪除「weightSum」我自定義ViewPager,以便它只需要最大的孩子的高度。下面是定製ViewPager代碼:

public class CustomViewPager extends ViewPager 
{ 
    private int mCurrentPagePosition = 0; 

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

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

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    int height = 0; 
    for(int i = 0; i < getChildCount(); i++) { 
     View child = getChildAt(i); 
     child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
     int h = child.getMeasuredHeight(); 
     if(h > height) height = h; 
    } 

    heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); 

    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

public void reMeasureCurrentPage(int position) { 
    mCurrentPagePosition = position; 
    requestLayout(); 
} 
} 

第二步我這樣做,我從兩個RecyclerView的刪除「layout_weight」,並設置「layout_height」到「WRAP_CONTENT」和完成工作。

下面是更新的佈局代碼:

fragment_home.xml

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/scrollview" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_gravity="fill_vertical" 
android:fillViewport="true" 
tools:context="com.e2e.qnamo.fragment.HomeFragment"> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginLeft="@dimen/main_container_margin" 
    android:layout_marginTop="@dimen/main_container_margin" 
    android:layout_marginRight="@dimen/main_container_margin" 
    android:layout_marginBottom="@dimen/main_container_margin" 
    android:orientation="vertical"> 

    <include 
     layout="@layout/layout_pager_indicator"/> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv_hot_topic" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="@dimen/recycler_margin_top" 
     tools:listitem="@layout/hot_topic_row" /> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv_category" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginTop="@dimen/recycler_margin_top" 
     android:layout_marginBottom="10dp" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     tools:listitem="@layout/category_row"/> 


</LinearLayout> 

layout_pager_indicator.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 

<com.e2e.qnamo.widget.CustomViewPager 
    android:id="@+id/bannerViewPager" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    tools:listitem="@layout/viewpager_indicator_single_item" /> 

<com.e2e.qnamo.widget.CirclePageIndicator 
    android:id="@+id/pager_indicator" 
    style="@style/CustomCirclePageIndicator" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:layout_gravity="center|bottom"/> 

這就是它!

相關問題