Мне нужно центрировать элементы в каждой строке, чтобы они были как в этом макете. Я искал, если есть какой-либо макет, который работает таким образом, не смотря. элементы центрированы в их рядах.
Вот как это выглядит сейчас в моем коде.
Мне нужно центрировать элементы в каждой строке, чтобы они были как в этом макете. Я искал, если есть какой-либо макет, который работает таким образом, не смотря. элементы центрированы в их рядах.
Вот как это выглядит сейчас в моем коде.
Возьмите LinearLayout
в макете строки RecyclerView
, затем отпустите android:layout_gravity="center"
до LinearLayout
.
Для каждой строки изображений вам нужно взять разные LinearLayout
.
Вот пример кода:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/image1"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:src="@drawable/image1" />
<ImageView
android:id="@+id/image2"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:src="@drawable/image2" />
<ImageView
android:id="@+id/image3"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:src="@drawable/image3" />
</LinearLayout>
Я сделал так: make recyclerview width для wrap_content и андроид:. layout_gravity = "center_horizontal"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_photos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingLeft="@dimen/dp30"
android:paddingRight="@dimen/dp30" />
</LinearLayout>
Я предполагаю, что вы используете LinearLayoutManager
с RecyclerView
для эффекта ListView
-style. В этом случае используйте horizontal
LinearLayout
для каждой строки с android:gravity="center"
, чтобы центрировать его содержимое.
вы можете добавить некоторые макеты динамически, например:
1- создать LinearLayout в java-коде и настроить его (гравитация,...)
2- добавить несколько значков в linearLayout
3- добавьте linearLayout к вашему адаптеру
4- повтор 1,2,3
// : declare new horizontal linearLayout
ImageView myIcons[nomOfIcons];
// : add all icons to myIcons
for(int i=1; i<=nomOfIcons; i++){
linearLayout.addView(myIcons[i - 1]);
if(i%numOfIconsInOneHorizontalLinearLayout==0) {
results.add(linearLayout); // add linearLayout to adapter dataSet
// : declare new horizontal linearLayout
}
}
if(n%numOfIconsInOneHorizontalLinearLayout!=0) // add last linearLayout if not added in the loop
results.add(linearLayout);
mAdapter.notifyDataSetChanged(); // update adapter
вы можете использовать новый layoutManager из google FlexLayoutManager это даст вам большой контроль и гибкость над элементами recyclerView
поместите ваш recyclerview в linearlayout в xml. и использовать (как для recyclerview, так и для linearlayout)
android:layout_gravity="center"
и ширина recyclerview должна быть wrap_content, в то время как linearlayout должен иметь math_parent и вы должны указать ширину для вашего row_item
Используйте gridLayoutManager = new GridLayoutManager(context,6)
и переопределите setSpanSizeLookup
.
Пример:
int totalSize=list.size();
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
int span;
span = totalSize % 3;
if (totalSize < 3) {
return 6;
} else if (span == 0 || (position <= ((totalSize - 1) - span))) {
return 2;
} else if (span == 1) {
return 6;
} else {
return 3;
}
}
});
Это будет работать, если вы хотите отображать 3 элемента в строке и оставаться в центре сетки.
Измените количество интервалов диспетчера макета сетки, соответственно, ваше требование.