RecyclerView GridLayoutManager: изменить ширину столбца
У меня есть RecyclerView и GridLayoutManager. Ширина столбцов равна, но я хочу первый столбец с 80dp
ширина. Это возможно?
Пример: ширина RecyclerView 5 столбцов
final columnsCount = 5;
recyclerView.width = 500dp
column0.width = 80dp
column 1-2-3-4 width = (recyclerview.width - column0.width) / columnsCount
Любой совет?
Изменить: код
public class TestRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int VIEW_TYPE_START = 0;
private static final int VIEW_TYPE_PROGRESS_ITEM = 1;
private LayoutInflater inflater;
public TestRecyclerViewAdapter(Context context) {
this.inflater = LayoutInflater.from(context);
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return VIEW_TYPE_START;
} else {
return VIEW_TYPE_PROGRESS_ITEM;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view;
switch (viewType) {
case VIEW_TYPE_START:
view = this.inflater.inflate(R.layout.view_item_small, parent, false);
return new TestViewHolder(view);
case VIEW_TYPE_PROGRESS_ITEM:
view = this.inflater.inflate(R.layout.view_item, parent, false);
return new TestViewHolder(view);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 5;
}
}
view_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0000FF"
android:orientation="vertical">
view_item_small.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="80dp"
android:layout_height="match_parent"
android:background="#FF0000"
android:orientation="vertical">
Использование:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
recyclerView.setAdapter(new TestRecyclerViewAdapter(this));
recyclerView.setLayoutManager(new GridLayoutManager(this, 5));
}
2 ответа
В вашем адаптере вы можете сделать это.
проверьте, равняется ли позиция элемента 0, если это так, то увеличьте разметку шириной 80dp.
Создайте второй макет с шириной 80dp для использования в вашем RecyclerView.Adapter
затем в onCreateViewHolder()
Метод проверяет, равняется ли позиция элемента 0, если это так, то увеличьте разметку шириной 80dp, иначе увеличьте нормальную разметку. Вы должны создать свои собственные viewTypes для этого, вам придется переопределить getItemViewType(int position)
метод для этого, это будет выглядеть примерно так:
private static final int VIEWTYPE_FIRST_ITEM = 1;
private static final int VIEWTYPE_NORMAL_ITEM = 2;
@Override
public int getItemViewType(int position) {
if(position == 0) {
return VIEWTYPE_FIRST_ITEM;
} else {
return VIEWTYPE_NORMAL_ITEM;
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
if(viewType == VIEWTYPE_FIRST_ITEM) {
view = //TODO inflate layout with 80dp
} else {
view = //TODO inflate normal layout
}
return new ViewHolder(view);
}