Да, вы можете достичь этого с помощью StaggeredLayoutManager, в котором вам нужно установить счетчик промежутков & Ориентация в соответствии с размером данных, как показано ниже:
enter code private void setSpanValue() {
StaggeredGridLayoutManager staggeredGridLayoutManager;
if (modelArrayList.size() == 1) {
staggeredGridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
} else if (modelArrayList.size() == 2) {
staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
} else if (modelArrayList.size() == 3) {
staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
} else if (modelArrayList.size() == 4) {
staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
} else {
staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
}
recyclerView.setLayoutManager(staggeredGridLayoutManager);
recyclerView.hasFixedSize();
Adapter adapter = new Adapter(this, modelArrayList, checkEvenOrOdd(modelArrayList.size()));
recyclerView.setAdapter(adapter);
}
Для более чем 4 элементов вам нужно проверить, являются ли данные четными или нечетными, как показано ниже:
private boolean checkEvenOrOdd(int n) {
if ((n % 2) == 0) {
// number is even
return true;
} else {
// number is odd
return false;
}
}
Проверьте мой пример проекта, он решит вашу проблему https://github.com/DanishAmjad12/HetrogenousLayout