2016-03-25 15 views
1

Dieses Bild sollte hoffentlich ein bisschen erklären, was ich machen möchte. Bitte beachten Sie, dass die ViewGroup, die sowohl die Textansicht als auch die Recycleransicht ist, eine FRAMELAYOUT ist.Recyclerview: Lassen Sie den ersten Viewholder-Gegenstand mit etwas Platz von oben beginnen

enter image description here

Ich möchte einen recyclerview haben, dass match_parent zum FRAMELAYOUT. Die textview, die das Wort "Orte" zeigt, muss oben auf der Recyclerview sein. Sie können es nicht aus dem Bild sehen, aber die textview hat eine alpha von 0,5, so dass es halbtransparent ist.

Was ich tun möchte ist, dass die recyclerview viewholders, die das dunkelgrüne Element ist, das Sie auf dem Bild sehen, ein wenig unter der Höhe der textview starten. Wenn der Benutzer die recyclerview scrollt, scrollen die Elemente auf diese Weise elegant unter dem halbtransparenten textview.

Gibt es eine Möglichkeit, sicherzustellen, dass das erste Element in einer Recycleransicht ein wenig oberhalb der Recycleransicht beginnt (d. H. Die Höhe der Textansicht), damit dieser Effekt erzielt werden kann?

Antwort

5

Probieren Sie die Artikeldekoration nur für den ersten Artikel aus.

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; 
     } 
    } 
} 

USAGE

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)); 

Hoffnung, das hilft.

+0

Dies ist ein interessanter Vorschlag. Ich werde das später versuchen. – Simon

0

einfach ein Layout mit gleicher Höhe dieser Textview schaffen wie

Layout/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" /> 

Verwendung dieses Layout als Header für RecyclerView.

Ich hoffe, dies wird Ihr Problem lösen.

EDIT:

dachte ich, das Layout wie diese

<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> 

ist, ob dies der Fall ist, 'Layout/header.xml' mit (i specicied oben) als Header der lösen Problem. Weil der erste Artikelkopf nicht sichtbar ist, da er transparent ist. während Scrollen 2. Element wird nach oben gehen sieht aus wie die Bewegung hinter der TextView.

EDIT 2:

Sie auch eine andere Art und Weise nutzen könnten. Enthalten Sie layout/header.xml 'in Ihrem RecyclerView Layout des Artikels.als

<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> 

in getView von RecyclerViewsetVibility(true) wenn es Artikel 1 sonst setVibility(false)

+0

Nein, wird es nicht. Bitte beachten Sie, dass es sich bei der Viewgroup um ein Framelayout handelt. Wenn ich das getan habe, was Sie vorgeschlagen haben, scrollt die Recycleransicht nicht unter der Textansicht - ich kann die Recycleransicht nicht in der halbtransparenten Textansicht sehen. – Simon

+0

sehe meine Bearbeitung einmal. – shobhan

+0

Ihre Lösung würde funktionieren, aber das Problem ist, dass ich einen gefälschten ersten Artikel in meiner Recycleransicht erstellen werde, der schwierig zu verwalten ist, wenn sich Ihre Recycleransicht ständig ändert, Artikel vom Benutzer nach oben hinzugefügt werden, Artikel gelöscht werden usw. – Simon

3

Sie können es versuchen !! android:clipToPadding="false"

Legt fest, ob die Viewgroup ihre Kinder Clip wird und die Größe (aber nicht Clip) jede EdgeEffect seiner Polsterung, wenn padding nicht Null ist. Diese Eigenschaft ist standardmäßig auf true festgelegt.

<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">