2016-03-25 12 views
1

この写真は私がしたいことについて少し説明してください。 textviewとrecyclerviewの両方のビューグループがFRAMELAYOUTであることに注意してください。Recyclerview:最初の視聴者アイテムが先頭から少しのスペースで始まるようにします。

enter image description here

私はでframeLayoutmatch_parent recyclerviewを持っていると思います。 「場所」という語を示すtextviewは、recyclerviewの上になければなりません。イメージから見ることはできませんが、textviewalphaが0.5で半透明です。

私がしたいことは、textviewの高さの下で小さな方法を開始する画像に表示される暗い緑の項目であるrecyclerview viewholdersを作ることです。このようにして、ユーザーがrecyclerviewをスクロールすると、アイテムは半透明のtextviewの下にスクロールして表示されます。

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

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

は、この情報がお役に立てば幸いです。

+0

これは興味深い提案です。私はこれを後で試してみる。 – Simon

0

は単に

レイアウト/ 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のヘッダとしてこのレイアウトのようにそののTextViewの同じ高さのレイアウトを作成します。

これがあなたの問題を解決することを願っています。

EDIT

私はあなたのレイアウトは、このような場合、ヘッダとして(iは上記specicied) 'レイアウト/ header.xml' を使用して解決する本

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

であると考えられ問題。最初のアイテムのヘッダーは透明であるため、表示されないためです。 2番目の項目をスクロールすると、TextViewの後ろに移動するように見えます。

EDIT 2:

あなたはまた、別の方法を使用することができます。 RecyclerViewの商品のレイアウトにlayout/header.xml 'を含めてください。それは項目他の1 setVibility(false)

+0

いいえ、それはできません。ビューグループはframelayoutであることに注意してください。私があなたが示唆したようにした場合、recyclerviewはtextviewの下でスクロールしません - 私はsemi-transparent textviewの下でrecyclerviewを見ることができません。 – Simon

+0

私の編集を一度見てください。 – shobhan

+0

あなたの解決策はうまくいくでしょうが、問題は私があなたのrecyclerviewが常に変化しているときに管理するのが難しくなる私のrecyclerviewで偽の第1のアイテムを作成することです、ユーザーがトップに追加されたアイテム、削除されているアイテムなど – Simon

3

であればRecyclerViewsetVibility(true)getView

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

として、あなたはそれを試すことができます! 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"> 
関連する問題