2017-09-07 47 views
0

我有一個Android活動,其中包含的數據一本書描述一個RelativeLayout的(因爲你可以計算出:標題,圖片和摘要,作者...)機器人滾動全RelativeLayout的,而不是隻RecyclerView

在佈局的底部,我已經設置了RecyclerView來顯示用戶的評論(縮略圖,暱稱,日期和評論)。

一切工作正常,但是當我有很多評論時,我只能滾動RecyclerView,而不是整個RelativeLayout。在簡化的方式:這是我的佈局

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 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" 
xmlns:fresco="http://schemas.android.com/apk/res-auto" 
android:id="@+id/activity_book_detail" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#EEEEEE"> 
<com.facebook.drawee.view.SimpleDraweeView 
    android:id="@+id/bookDetailThumbnail" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    fresco:placeholderImage="@drawable/not_available_thumbnail" 
    fresco:failureImage="@drawable/not_available_thumbnail" 
    fresco:actualImageScaleType="centerCrop" 
    /> 


<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/bookDetailTitle" 
    android:textAlignment="center" 
    android:textSize="40dp" 
    android:layout_below="@id/bookDetailThumbnail" 
    android:text="titulo"/> 
<TextView 
    android:layout_width="96dp" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/bookDetailTitle" 
    android:id="@+id/writtenByFieldName" 
    android:text="@string/written_by"/> 
<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/summaryText" 
    android:layout_below="@id/writtenByFieldName" 
    android:layout_centerHorizontal="true"/> 
<TextView 
    android:layout_width="96dp" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/summaryText" 
    android:id="@+id/publishedOnFieldName" 
    android:text="@string/published_on"/> 
<TextView 
    android:layout_width="96dp" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/publishedOnFieldName" 
    android:id="@+id/ratingFieldName" 
    android:text="@string/rating_of_users"/> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/bookDetailVersion" 
    android:layout_below="@id/ratingFieldName" 
    android:text="version"/> 

<ProgressBar 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:src="@drawable/loading_icon" 
    android:id="@+id/comments_loading_icon" 
    android:layout_below="@id/bookDetailVersion" 
    android:indeterminate="true" /> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/comments_loading_icon" 
    android:id="@+id/loading_comments_text" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:text="@string/loading_comments_text"/> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/commentsList" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/bookDetailVersion" 
    android:visibility="invisible"/> 

起初我以爲我應該使用滾動型,但因爲它是谷歌官方文檔中提及ScrollView一個RecyclerView或ListView決不添加到滾動視圖。這樣做會導致較差的用戶界面性能和較差的用戶體驗

那麼,如何在滾動用戶評論時滾動完整的相對佈局?

回答

1

您可以添加包含所有佈局的NestedScrollView。

在這個例子中,圖像和列表項都一起滾動。

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.NestedScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <ImageView 
      android:id="@id/cover" 
      android:layout_width="match_parent" 
      android:layout_height="250dp" 
      android:contentDescription="@string/app_name"/> 

     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/cover" /> 
    </RelativeLayout> 
</android.support.v4.widget.NestedScrollView> 
+0

設置setNestedScrollingEnabled()財產RecyclerView像記住,滾動型和NestedScrollView必須只有一個孩子,所以你可以使用的ViewGroup(例如RelativeLayout,LinearLayout)來分組所有可滾動的視圖。 – Gamabunta

+0

作品!非常感謝! –

1

嵌套滾動更好地使用NestedScrollView

NestedScrollView顧名思義時,有一個需要內的另一個滾動視圖滾動視圖使用。

ScrollView vs NestedScrollView

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.NestedScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     // add here all your controlls 

     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/cover" /> 
    </RelativeLayout> 
</android.support.v4.widget.NestedScrollView> 

並且不要忘了下面的代碼

mRecyclerView.setNestedScrollingEnabled(false);