2016-03-25 2 views
1

Эта фотография, надеюсь, должна немного объяснить, что я хочу сделать. Помните, что ViewGroup, что и textview, и recyclerview является FRAMELAYOUT.Recyclerview: сделайте первый объект для просмотра с небольшим пространством сверху

enter image description here

Я хотел бы иметь recyclerview, что match_parent к FRAMELAYOUT. Значение textview, которое показывает слово «Места», должно быть на вершине recyclerview. Вы не можете видеть это по изображению, но textview имеет alpha из 0,5, чтобы он был полупрозрачным.

Что я хочу сделать, так это сделать recyclerview viewholders, который является темно-зеленым элементом, который вы видите на картинке, немного подойдите под высоту textview. Таким образом, когда пользователь прокручивает recyclerview, элементы будут изящно прокручиваться под полупрозрачным textview.

Есть ли способ удостовериться, что первый элемент в recyclerview немного начал с верхней части recyclerview (т. Е. Высота текста), чтобы этот эффект мог быть достигнут?

ответ

5

Попробуйте украшение предметов только для первого предмета.

public class VerticalSpaceItemDecoration extends RecyclerView.ItemDecoration { 

    private final int mVerticalSpaceHeight; 

    public VerticalSpaceItemDecoration(int mVerticalSpaceHeight) { 
     this.mVerticalSpaceHeight = mVerticalSpaceHeight; 
    } 

    @Override 
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, 
      RecyclerView.State state) { 
     if (parent.getChildAdapterPosition(view) == 1) { 
      outRect.top = mVerticalSpaceHeight; 
     } 
    } 
} 

ПРИМЕНЕНИЯ

RecycleView recyclerView = (RecyclerView) rootView.findViewById(R.id.fragment_home_recycler_view); 
LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(getActivity()); 
recyclerView.setLayoutManager(mLinearLayoutManager); 

//add ItemDecoration 
recyclerView.addItemDecoration(new VerticalSpaceItemDecoration(TOP_ITEM_SPACE)); 

Надеется, что это помогает.

+0

Это интересное предложение. Я попробую это позже. – Simon

0

Просто создайте макет с той же высоты, что TextView как

макете/header.xml

<View xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="@dimen/recyclerViewWidth" 
    android:layout_height="@dimen/yourTextViewHeight" 
    android:background="@android:color/transparent" /> 

использовать этот макет в качестве заголовка для RecyclerView.

Надеюсь, что это решит вашу проблему.

EDIT:

Я думал, что ваш макет как этот

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


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

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@android:color/black" 
     android:alpha="0.8" 
     android:text="@string/action_switch" 
     android:textColor="@android:color/white" /> 

</FrameLayout> 

, если это так, используя 'раскладку/header.xml' (я specicied выше) в качестве заголовка будет решить проблема. Поскольку заголовок первого элемента не отображается, поскольку он прозрачен. в то время как прокрутка 2-го пункта будет идти вверх, выглядит как движущийся за TextView.

EDIT 2:

вы могли бы использовать другой путь также. включите layout/header.xml 'в макет вашего RecyclerView

<Layout ><!-- your item's layout --> 
    <include layout="@layout/panel_icon_item" 
      android:id="@+id/marginTopView" 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/yourTextViewHight"/> 
    <!-- your layout code --> 
</Layout> 

в getView из RecyclerViewsetVibility(true) если пункт 1 еще setVibility(false)

+0

Нет, не будет. Пожалуйста, помните, что группа просмотра является рамкой. Если бы я сделал так, как вы предложили, recyclerview не будет прокручиваться под текстовым представлением - я не вижу recyclerview в полупрозрачном текстовом виде. – Simon

+0

см. Мое редактирование один раз. – shobhan

+0

Ваше решение будет работать, но проблема в том, что я буду создавать поддельный 1-й элемент в моем recyclerview, который становится трудно управлять, когда ваш recyclerview всегда меняется, элементы добавляются пользователем наверху, удаляются элементы и т. Д. – Simon

3

вы можете попробовать его !! android:clipToPadding="false"

Определяет, будет ли ViewGroup клип своих детей и изменение размера (но не обрезают) любой EdgeEffect к его заполнения, если обивка не равен нулю. По умолчанию для этого свойства установлено значение true.

<android.support.v7.widget.RecyclerView 
    android:id="@+id/rv" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:clipToPadding="false" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
Смежные вопросы