2017-12-12 12 views
0

レイアウト上にヘルパーテキストを含むTextViewと、関連アイテムを含むRecyclerViewが続くレイアウトがあります。RecyclerViewの先頭にDividerItemDecorationエフェクトを追加します

私はRecyclerViewにDividerItemDecorationを追加しましたが、RecyclerViewの最初の要素からのヘルパーTextViewではなく、要素を分けています(その名前は分かります)。

DividerItemDecorationを拡張する方法はありますか、空のView要素をTextViewとRecyclerViewの間にバックグラウンドで配置する必要がありますか?

答えて

1

あなたは以下のようにrecyclerViewとのTextViewを分割するために、あなたのXMLでビューを使用することができます。

<View 
     android:layout_width="match_parent" 
     android:layout_height="1dp" 
     android:background="@color/colorPrimary" /> 
0

ビルドインDividerItemDecorationクラスを使用してやりたいする方法はありません。

分周器は2段階の手順で描画されます。まずgetItemOffsets()を使用して、RecyclerViewの各項目の下部にスペースを追加します。次に、onDraw()を使用して、そのスペース内に仕切線を描画します。

ソースコードを見て:あなたはそのスペースを見ることができます

ここ
@Override 
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, 
     RecyclerView.State state) { 
    ... 
    if (mOrientation == VERTICAL) { 
     outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); 
    } else { 
     outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); 
    } 
} 

は、各項目の(水平モードで、または右)下にのみ追加されます。最初の項目には特別な場合もありません。ここで

private void drawVertical(Canvas canvas, RecyclerView parent) { 
    ... 
    final int childCount = parent.getChildCount(); 
    for (int i = 0; i < childCount; i++) { 
     final View child = parent.getChildAt(i); 
     parent.getDecoratedBoundsWithMargins(child, mBounds); 
     final int bottom = mBounds.bottom + Math.round(child.getTranslationY()); 
     final int top = bottom - mDivider.getIntrinsicHeight(); 
     mDivider.setBounds(left, top, right, bottom); 
     mDivider.draw(canvas); 
    } 
    ... 
} 

あなたはmDivider描画可能な垂直境界が各子ビューの下端に基づいて計算されていることがわかります。

もちろん、RecyclerView.ItemDecorationの独自の実装を作成し、リストの最初の項目の特殊ケースを作成することもできます。

編集:ここDividerItemDecorationに基づいて削ぎ落としたと簡略化ItemDecorationだだけでなく、最初の項目の上に仕切りを描く:https://gist.github.com/zizibaloob/0c6be3e1318257950507e9c614c8aa70

関連する問題