#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:
Ответ №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, но приведенное выше решение является решением в одном месте, хотя код выглядит большим.