package net.reichholf.dreamdroid.widget;
import android.content.Context;
import android.content.res.TypedArray;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
public class AutofitRecyclerView extends RecyclerView {
public static int DEFAULT_MAX_SPAN_COUNT = -1;
private int mColumnWidth = -1;
private int mSpanCount = 4;
private int mMaxSpanCount = DEFAULT_MAX_SPAN_COUNT;
public AutofitRecyclerView(Context context) {
super(context);
init(context, null);
}
public AutofitRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public AutofitRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs);
}
public void setMaxSpanCount(int maxSpanCount) {
mMaxSpanCount = maxSpanCount;
}
private void init(Context context, AttributeSet attrs) {
if (attrs != null) {
int[] attrsArray = {
android.R.attr.columnWidth
};
TypedArray array = context.obtainStyledAttributes(attrs, attrsArray);
mColumnWidth = array.getDimensionPixelSize(0, -1);
array.recycle();
}
}
@Override
protected void onMeasure(int widthSpec, int heightSpec) {
super.onMeasure(widthSpec, heightSpec);
if (mColumnWidth > 0) {
int newSpanCount = Math.max(1, getMeasuredWidth() / mColumnWidth);
if(mMaxSpanCount > 0)
newSpanCount = Math.min(mMaxSpanCount, newSpanCount);
mSpanCount = newSpanCount;
((GridLayoutManager)getLayoutManager()).setSpanCount(mSpanCount);
}
}
}