package shts.jp.android.nogifeed.views;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.GridView;
import android.widget.ListAdapter;
import java.lang.reflect.Field;
import shts.jp.android.nogifeed.common.Logger;
/**
*/
public class FixedGridView extends GridView {
private ListAdapter mAdapter;
public FixedGridView(Context context) {
this(context, null);
}
public FixedGridView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public FixedGridView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setAdapter(ListAdapter adapter) {
super.setAdapter(adapter);
mAdapter = adapter;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int num = getNumColumns();
float density = getContext().getResources().getDisplayMetrics().density;
int px = Math.round(3 * density);
int width = px * num; // px * カラム数
int height = px * (int) Math.ceil((float) mAdapter.getCount() / (float) num); // px * 行数
Logger.v("onMeasure", "in : num(" + num + ") density(" + density + ") px(" + px
+ ") width(" + width + ") height(" + height + ")");
setMeasuredDimension(width, height);
}
@Override
public int getNumColumns() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
return super.getNumColumns();
} else {
try {
Field numColumns = getClass().getSuperclass().getDeclaredField("mNumColumns");
numColumns.setAccessible(true);
return numColumns.getInt(this);
} catch (Exception e) {
return 1;
}
}
}
}