Daniel Bo 的答案的替代方法是手动计算该值:
private int getColumnWidth(Context context, GridView gridView) {
if (android.os.Build.VERSION.SDK_INT >= 16)
return gridView.getColumnWidth();
Resources res = context.getResources();
int lPad = (int)res.getDimension(R.dimen.left_padding);
int rPad = (int)res.getDimension(R.dimen.right_padding);
int hSpace = (int)res.getDimension(R.dimen.horizontal_spacing);
int cols = gridView.getNumColumns();
int width = gridView.getWidth();
return (width - lPad - rPad + hSpace) / cols - hSpace;
}
请注意,这只适用于高于 11(Honeycomb)的 API,并假设您使用定义为资源的某些值设置 GridView。例如,假设您有一个 dimens.xml 具有:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="left_padding">4dp</dimen>
<dimen name="right_padding">8dp</dimen>
<dimen name="horizontal_spacing">2dp</dimen>
</resources>
然后你的布局 XML 文件有:
<GridView
...
android:horizontalSpacing="@dimen/horizontal_spacing"
android:paddingLeft="@dimen/left_padding"
android:paddingRight="@dimen/right_padding"
...
/>
如果您有许多类似的 GridView,最好将这些属性放在自定义样式中。
至少这对我有用,而不必使用反射。请注意,频繁调用此函数可能会过大。
希望这可以帮助某人。