2016-07-25 4 views
0

Когда активность открывается, в ней отображается верхняя часть макета RecyclerView, а не верхняя часть макета активности.На начальном этапе развертывания на вершине RecyclerView

активность файл макета .xml:

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

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" 
       android:paddingBottom="20dp" 
       android:paddingTop="20dp"> 

      ... 
      <RelativeLayout/> 
      <View /> 
      <LinearLayout/> 
      ... 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/venue_place_info_gallery_recycler_view" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="10dp"/> 

      </LinearLayout> 
    </ScrollView> 

активность OnCreate:

RecyclerView galleryRecyclerView = (RecyclerView) findViewById(R.id.venue_place_info_gallery_recycler_view); 
    galleryRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(gridLayoutColumns, StaggeredGridLayoutManager.VERTICAL)); 
    VenueGalleryAdapter venueGalleryAdapter = new VenueGalleryAdapter(VenuePlaceInfoActivity.this, images); 
    galleryRecyclerView.setAdapter(venueGalleryAdapter); 

Адаптер очень прост. Он получает изображения в качестве аргумента в конструкторе, и данные не могут быть изменены позже. Я попытался применить все виды настроек к макету RecyclerView, но он работает так же или без них. Например:

galleryRecyclerView.setNestedScrollingEnabled(false); 
    galleryRecyclerView.setHasFixedSize(true); 
    galleryRecyclerView.setLayoutFrozen(true); 
    galleryRecyclerView.setPreserveFocusAfterLayout(false); 

UPDATE:

я нашел больше информации по этому вопросу в answer of another question. Это все из-за того, что ScrollView и RecyclerView не способны жить вместе, даже если для setNestedScrollingEnabled установлено значение true. Но это все еще не дает мне решения моей проблемы. Мне нужно иметь некоторые вещи над галереей RecyclerView, и я хочу прокрутить вниз все изображения (не помещая их в контейнер).

+0

Можете ли вы приложить скриншот? –

+0

Удалить галереюRecyclerView.setPreserveFocusAfterLayout (false); line – vinoth12594

+0

Я сказал, что эти дополнительные параметры удалены на данный момент. Я только что попробовал их раньше, но они ничего не изменили. – Galya

ответ

0

Если вы хотите, чтобы ваш макет выглядел хорошо, я бы использовал координаторLayout с AppBarLayout в качестве первого элемента внутри него, а RecyclerView - вторым. Внутри AppBarLayout вы должны поместить все, что вы хотели бы иметь над RecyclerView. Что-то похожее на это:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

    <android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:background="@color/white"> 

     <android.support.design.widget.AppBarLayout 
      android:id="@+id/appbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:elevation="0dp"> 

      <android.support.design.widget.CollapsingToolbarLayout 
       android:id="@+id/collapsing_toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       app:layout_scrollFlags="scroll|enterAlways" 
       app:titleEnabled="false"> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:clipChildren="false" 
        android:clipToPadding="false" 
        android:orientation="vertical" 
        android:paddingTop="20dp" 
        app:layout_collapseMode="parallax"> 

        <!-- stuff you want above your recyclerview --> 

       </LinearLayout> 
      </android.support.design.widget.CollapsingToolbarLayout> 
     </android.support.design.widget.AppBarLayout> 

     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

    </android.support.design.widget.CoordinatorLayout> 
</LinearLayout> 

Кто-то делает что-то подобное здесь, только вместо того, чтобы использовать панель инструментов в appbarlayout, вы можете использовать любой вид раскладки вы хотите. AppBarLayout - это расширенный вертикальный LinearLayout: http://www.basagee.tk/handling-scrolls-with-coordinatorlayout/

+0

Это, вероятно, не тощее и простое решение, которое я искал, но он выполняет эту работу, поэтому это принятый ответ. Я отредактировал его, чтобы добавить действующий код для меня. – Galya

Смежные вопросы