0

サポートライブラリからDividerItemDecorationを使用しています。次DividerItemDecoration水平が中央に表示されない

は装飾

GridLayoutManager gridLayoutManager = new GridLayoutManager(context, 3); 
recyclerView.setLayoutManager(gridLayoutManager); 
recyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.HORIZONTAL)); 

を追加するためのコードですが、分周器は、水平方向に中央に表示されていません。

以下はそのスクリーンショットです。

enter image description here

後、アイテムレイアウト

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_gravity="center" 
android:clickable="true" 
android:gravity="center" 
android:orientation="vertical" 
android:paddingBottom="8dp" 
android:paddingTop="8dp"> 


<ImageView 
    android:id="@+id/imgFacility" 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:layout_gravity="center" 
    android:foreground="@drawable/page_main_category_home_grid_selector" 
    android:gravity="center" 
    android:src="@drawable/plane_img" 
    android:tint="?colorAccent" /> 


<TextView 
    android:id="@+id/txtFacilityName" 
    mediumFontPath="fonts/montserrat-medium.ttf" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:layout_marginTop="2dp" 
    android:ellipsize="end" 
    android:gravity="center" 
    android:maxLines="2" 
    android:minLines="2" 
    android:text="Facility\nEWlall" 
    android:textColor="#353535" 
    android:textSize="12sp" 
    tools:ignore="MissingPrefix" /> 

</LinearLayout> 

はまた、私は以下のGridDividerDecoration

を使用して、それの出力 enter image description here

どのようにこれは、各レイアウトに背景色を与えられ、試されます外見は

enter image description here

+1

あなたのアイテムのレイアウトを投稿してください。あなたのアイテムのビューには、整列の問題があるはずです。 – ADM

+0

投稿された商品のレイアウト – apk

+0

さて、それは?コンテナレイアウトはどこですか。アイテムレイアウト全体を投稿する – ADM

答えて

0

まずそれは縦表示するために役立つ、あなたのrecyclarview

このような
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity())); 

に、この使用後のコード

public class DividerItemDecoration extends RecyclerView.ItemDecoration { 

private static final int[] ATTRS = {android.R.attr.listDivider}; 

private Drawable mDivider; 
private int mInsets; 

public DividerItemDecoration(Context context) { 
    TypedArray a = context.obtainStyledAttributes(ATTRS); 
    mDivider = a.getDrawable(0); 
    a.recycle(); 

    mInsets = 1; 
} 

@Override 
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { 
    drawVertical(c, parent); 
    drawHorizontal(c, parent); 
} 

/** 
* Draw dividers at each expected grid interval 
*/ 
public void drawVertical(Canvas c, RecyclerView parent) { 
    if (parent.getChildCount() == 0) return; 

    final int childCount = parent.getChildCount(); 

    for (int i = 0; i < childCount; i++) { 
     final View child = parent.getChildAt(i); 
     final RecyclerView.LayoutParams params = 
       (RecyclerView.LayoutParams) child.getLayoutParams(); 

     final int left = child.getLeft() - params.leftMargin - mInsets; 
     final int right = child.getRight() + params.rightMargin + mInsets; 
     final int top = child.getBottom() + params.bottomMargin + mInsets; 
     final int bottom = top + mDivider.getIntrinsicHeight(); 
     mDivider.setBounds(left, top, right, bottom); 
     mDivider.draw(c); 
    } 
} 

/** 
* Draw dividers to the right of each child view 
*/ 
public void drawHorizontal(Canvas c, RecyclerView parent) { 
    final int childCount = parent.getChildCount(); 

    for (int i = 0; i < childCount; i++) { 
     final View child = parent.getChildAt(i); 
     final RecyclerView.LayoutParams params = 
       (RecyclerView.LayoutParams) child.getLayoutParams(); 

     final int left = child.getRight() + params.rightMargin + mInsets; 
     final int right = left + mDivider.getIntrinsicWidth(); 
     final int top = child.getTop() - params.topMargin - mInsets; 
     final int bottom = child.getBottom() + params.bottomMargin + mInsets; 
     mDivider.setBounds(left, top, right, bottom); 
     mDivider.draw(c); 
    } 
} 

@Override 
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 
    //We can supply forced insets for each item view here in the Rect 
    outRect.set(mInsets, mInsets, mInsets, mInsets); 
} 

}

の下に使用して、この装飾クラスのクラスを作成し、項目間の水平線。

+0

同じ問題に直面してこれを試してみました – apk