I\'m trying to make an expandable TextView that expands/collapses when a user presses a button. The TextView and ImageButton are in a CardView, which is added to a RecyclerV
You can override onLayoutChildren
in the LayoutManager and measure it if state.isPreLayout
return false. I'm hoping that you are not changing the total size of the View because LayoutManager will not see this change. Also because layout requests are disabled at that stage, your view will not get a new measure and layout.
If it resizes your view, do it in onBind and measure the textview yourself to decide whether you want to enable the button or not.
LinearLayout.LayoutParams
- this could be RelativeLayout.LayoutParams
according to yours main layout
mParentContainer
- this is RecyclerView
- passed to yours adapter
Utils.dpToPx(8+15);
- here addition of margins cause they are not counted on measure
totalHeight += 1;
- is to cause adapter to bind next view holder
in ViewHolder:
int totalHeight = 0;
for (int i = 0; i < getItemCount(); i++){
View chView = viewHolder . itemView;
chView.measure(
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
);
totalHeight += chView.getMeasuredHeight();
totalHeight += Utils.dpToPx(8 + 15);
}
totalHeight += 1;
LinearLayout.LayoutParams listParams = (LinearLayout.LayoutParams) mParentContainer . getLayoutParams ();
listParams.height = totalHeight;
mParentContainer.setLayoutParams(listParams);