I currently have a need to use a RecyclerView (or ListView) but the number of items is fixed at 4. I want those 4 items to equally use the available space on the screen. The RecyclerView is the only view on the screen except for the app bar. I.e. RecyclerView has layout_height
set to match_parent
. I chose the RecyclerView because the items have different layouts depending on model state.
I haven't looked it up yet, but I'm sure I can set the height programmatically in Java code for each item. But that seems inelegant if I can specify it in the XML. Similar questions to my right, as I write this, answer that question.
I've tried the following in the item_layout.xml file, the way layout_weight
is used in other scenarios:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="0dp">...</LinearLayout>
But then nothing shows on screen.
What I'd like to know is, can I do this in the layout XML with layout_weight
, or something else? If so, how?
The simplest way is to add top/bottom margins around the first item in the adapter's row. android:layout_marginBottom="4dp". (Note adding the margins to the parent layout won't cut it.)
Try to use cardElevation=0dp. This should remove the extra spacing between recyclerview items.
getItemCount() : RecyclerView calls this method to get the size of the data set. For example, in an address book app, this might be the total number of addresses. RecyclerView uses this to determine when there are no more items that can be displayed.
As the API reference says, layout_weight
is an attribute of LinearLayout
, so it cannot be used with other ViewGroups like, for instance, RecyclerView
and ListView
. Instead, you have to set the item's height programmatically.
Since you seem worried about your code's cleanliness, I think this is a rather elegant solution in case you use a RecyclerView
:
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater
.from(parent.getContext())
.inflate(R.layout.item_list, null);
int height = parent.getMeasuredHeight() / 4;
int width = parent.getMeasuredWidth();
view.setLayoutParams(new RecyclerView.LayoutParams(width, height));
return new ViewHolder(view);
}
Try this, work for me
int weight = 3; //number of parts in the recycler view.
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rowView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row,parent,false);
rowView.getLayoutParams().height = parent.getHeight() / weight;
return new ViewHolder(rowView);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With