Добавление толщины к линиям оформления элемента вида recycler

#java #android #android-recyclerview #item-decoration

#java #Android #android-recyclerview #элемент-оформление

Вопрос:

В моей деятельности я использую вид recycler с макетом сетки, там я просто настраиваю оформление элемента вида recycler, которое успешно добавляет линии в вид recycler, но эти линии слишком тонкие по толщине и не видны, поэтому мой вопрос в том, как я могу увеличить толщину и изменить цвет этих линий.

Вот код, который я использую:

 recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL));
recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.HORIZONTAL));
  

Скриншот моего RecyclerView:

Скриншот recyclerview

Ответ №1:

Я думаю, что нашел решение вашего вопроса…Для увеличения толщины линий оформления необходимо реализовать один файл с возможностью рисования…и добавьте это к оформлению … для изменения цвета в drawable вы указываете свой цвет, который хотите отобразить в линиях оформления..

Вот решение:

Добавить divider.xml в вашей папке для рисования…

divider.xml

 <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="line">
<size
    android:width="1dp"
    android:height="15dp"/>

    <solid android:color="@android:color/white"/>
</shape>
  

И это относится к вашей деятельности..

  Drawable mDivider = ContextCompat.getDrawable(this, R.drawable.divider);
 dividerItemDecoration.setDrawable(mDivider);
  

Комментарии:

1. Спасибо, но вам следует использовать dp вместо px

Ответ №2:

Вот более чистое решение:

Сначала мы можем использовать DividerItemDecoration для настройки линий. В дополнение к настройке толщины вы можете установить цвет разделителей:

  • GradientDrawable.setSize(width, height) задает размер в пикселях; указание высоты регулирует толщину разделителя.
  • Конструктор GradientDrawable использует ориентацию градиента и массив целых чисел цвета; необходимо указать два цвета, и вы можете оставить им одинаковое значение.
 DividerItemDecoration itemDecoration = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL);
GradientDrawable drawable = new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, new int[]{0xfff7f7f7, 0xfff7f7f7});
drawable.setSize(1,3);
itemDecoration.setDrawable(drawable);
recyclerView.addItemDecoration(itemDecoration);
  

Ответ №3:

Вы можете использовать это для одинаковой настройки сетки

 public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
  private int spanCount;
    private int spacing;
    private boolean includeEdge;

    public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
        this.spanCount = spanCount;
        this.spacing = spacing;
        this.includeEdge = includeEdge;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        int position = parent.getChildAdapterPosition(view); // item position
        int column = position % spanCount; // item column

        if (includeEdge) {
            outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
            outRect.right = (column   1) * spacing / spanCount; // (column   1) * ((1f / spanCount) * spacing)

            if (position < spanCount) { // top edge
                outRect.top = spacing;
            }
            outRect.bottom = spacing; // item bottom
        } else {
            outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing)
            outRect.right = spacing - (column   1) * spacing / spanCount; // spacing - (column   1) * ((1f /    spanCount) * spacing)
            if (position >= spanCount) {
                outRect.top = spacing; // item top
            }
        }
    }
}

/**
 * Converting dp to pixel
 */
private int dpToPx(int dp) {
    Resources r = getResources();
    return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics()));
}
  

И затем,

 recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true));
  

Комментарии:

1. Это не сработало, вместо добавления оформления линиями было добавлено пространство между элементами, а не строками

Ответ №4:

Попробуйте этот java-код

 ShapeDrawable vLine = new ShapeDrawable(new Shape() {
    @Override
    public void draw(Canvas canvas, Paint paint) {
        paint.setStrokeWidth(10);
        paint.setColor(Color.BLACK);
        canvas.drawLine(0, 0, 0, 500, paint);
    }
});
ShapeDrawable hLine = new ShapeDrawable(new Shape() {
    @Override
    public void draw(Canvas canvas, Paint paint) {
        paint.setStrokeWidth(10);
        paint.setColor(Color.BLACK);
        canvas.drawLine(0, 0, 500, 0, paint);
    }
});
DividerItemDecoration vDID = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL);
DividerItemDecoration hDID = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.HORIZONTAL);
vDID.setDrawable(vLine);
hDID.setDrawable(hLine);
recyclerView.addItemDecoration(vDID);
recyclerView.addItemDecoration(hDID);
  

Примечание: вы можете сделать это с помощью XML, но приведенное выше решение является решением в одном месте, хотя код выглядит большим.