2016-02-24 3 views
6

У меня есть фрагмент xml в TabLayout. TabLayout находится в макете CollapsingToolbar, который сворачивается при прокрутке содержимого фрагментов в TabLayout вниз. У меня есть один фрагмент, где мне нужен TextView над recyclerView.NestedScrollview + TextView + RecyclerView

Если у меня есть макет, как показано ниже, взятый из this question I asked before:

<LinearLayout> 
    <NestedScrollView 
     <TextView> 
     </TextView> 
    </NestedScrollView> 
    <View> 
    </View> 
    <RecyclerView> 
    </RecyclerView> 
</LinearLayout> 

Он работает нормально, пока TextView не имеет так много информации, что он заполняет или занимает большую часть экрана, RecyclerView заканчивает использование оставшееся пространство в целях отображения:

|------------------| 
|<TextView-------->| 
|<---------------->| 
|<---------------->| 
|<---------------->| 
|<---------------->| 
|</TextView------->| 
|<RecyclerView---->| 
|</RecyclerView--->| 
|__________________| 

Так recyclerview остается с минимальным пространством для просмотра. Если Textview занимает весь экран, recyclerView просто не отображается.

Взятые из this SO Question Если раскладка:

<FrameLayout> 
    <NestedScrollView 
     <TextView> 
     </TextView> 
    </NestedScrollView> 
    <View> 
    </View> 
    <RecyclerView> 
    </RecyclerView> 
</FrameLayout> 

только recyclerView дисплеи и TextView просто не существует.

Если раскладка:

<NestedScrollView> 
    <LinearLayout 
     <TextView> 
     </TextView> 
     <View> 
     </View> 
     <RecyclerView> 
     </RecyclerView> 
    </LinearLayout> 
</NestedScrollView> 

TextView просто показывает, есть ли содержание в RecyclerView или нет.

Как я могу иметь TextView свиток из окна достаточно, чтобы раскрыть recyclerview поэтому экран может перейти от этого:

|------------------| 
|<TextView-------->| 
|<---------------->| 
|<---------------->| 
|<---------------->| 
|<---------------->| 
|</TextView------->| 
|<RecyclerView---->| 
|</RecyclerView--->| 
|__________________| 

к этому:

|------------------| 
|<---------------->| 
|</TextView------->| 
|<RecyclerView---->| 
|<---------------->| 
|<---------------->| 
|<---------------->| 
|<---------------->| 
|</RecyclerView--->| 
|__________________| 

Мой текущий XML-код, где отображается только RecyclerView, а не TextView:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 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="wrap_content" 
      android:background="@color/white" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior"> 


    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

    <android.support.v4.widget.NestedScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <TextView 
      android:id="@+id/item_shipping_shipping_description" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="start|left" 
      android:padding="@dimen/margin_16" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 
    </android.support.v4.widget.NestedScrollView> 

    <View 
     android:id="@+id/line43" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/line_height" 
     android:background="@color/light_gray" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

    </LinearLayout> 


    <android.support.v7.widget.RecyclerView 
     android:id="@+id/item_shipping_fragment_recyclerview" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/white" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 
</FrameLayout> 
+0

не уверен, но попробовать, установив высоту макета зрения переработчиков match_parent и высота framelayout является также wrap_content так попробовать, изменив его тоже или оба вместе –

+0

Хорошо, я попробовал это, установите оба в match_parent, все произошло, что RecyclerView был единственным отображаемым представлением. Я попытался изменить FrameLayout на LinearLayout, и единственный вид, который был виден, был TextView – x10sion

+0

, у вас есть только одно текстовое представление, то почему вы поместили textview в nestedscrollview? попробуйте удалить scrollview –

ответ

1

Единственное исправление, которое у меня было для моей проблемы, - сделать список программным путем вложенным внутри вложенного scrollView. Я не смог использовать RecyclerView и вложенныеScrollview вместе.

+0

Ну, я смог сделать это с точной раскладкой, которую я вам дал. Ты это пробовал? – meltedspark

+0

да, это работает, но тогда у меня есть две разные области прокрутки в одном и том же разделе экрана, и, кроме того, у меня есть сворачивающаяся панель инструментов, поэтому, если я прокручиваю ее в прокручиваемой области, она рубит панель инструментов и просто затруднит ее для просмотра экрана. Спасибо за вашу помощь, хотя – x10sion

+0

Так как я ответил на ваш первоначальный вопрос, разве вы не думаете, что я заслуживаю награду? FYI, стартовый стартер не может получить щедрость. – meltedspark

0

Вместо компоновки кадра принимают LinearLayout с Verticle ориентации и поставить recyclerview в другой LinearLayout:

<LinearLayout orientation=verticle > 


    <LinearLayout 
     > 

    <android.support.v4.widget.NestedScrollView> 

     <TextView/> 

    </android.support.v4.widget.NestedScrollView> 

    <View 
     /> 

    </LinearLayout> 

    <LinearLayout> 
     <android.support.v7.widget.RecyclerView/> 
    </LinearLayout> 

</LinearLayout> 

высота расположение как расположение ребенка должен быть установлен в wrap_content

+0

Привет, спасибо за это, но это тоже не работает. TextView, на котором я тестирую, теперь имеет достаточно содержимого для прокрутки, но когда он достигает конец TextView RecyclerView не отображается – x10sion

+0

опубликовать ваш .java-код –

+0

Это не проблема с кодом java из-за того, что все работает отлично, если TextView приятный и короткий. RecyclerView имеет достаточно места для отображения – x10sion

6

Попробуйте добавить вес для обоих макетов.
Например, если вы хотите, чтобы TextView часть быть меньше или равна RecyclerView части:

<?xml version="1.0" encoding="utf-8"?> 
<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"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:orientation="vertical"> 

     <android.support.v4.widget.NestedScrollView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <TextView 
       android:id="@+id/item_shipping_shipping_description" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="start|left" 
       android:padding="@dimen/margin_16"/> 
     </android.support.v4.widget.NestedScrollView> 

     <View 
      android:id="@+id/line43" 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/line_height" 
      android:background="@color/light_gray"/>  
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:orientation="vertical"> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/item_shipping_fragment_recyclerview" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 
    </LinearLayout> 
</LinearLayout> 

Таким образом TextView, содержащий макет будет знать, что он должен обернуть содержание, с одной стороны, но имеют одинаковый вес с другой стороны, RecyclerView, и он будет выбирать наименьшее из них.

+0

Но что происходит с контентом в текстовом виде, когда он занимает более половины экрана, не будет ли он просто вырезать нижнюю часть текста? – x10sion

+0

Нет, это не потому, что TextView обернут с помощью NestedScrollView. Я тестировал этот макет, работает для меня. – meltedspark

+0

Хорошо, я дам вам пример и дам вам знать – x10sion

0

Вы можете использовать CoordinatorLayout, чтобы скрыть TextView на ReciclerView прокрутки:

Здесь легко tutorial.

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