有没有办法获得GridView for Android API Level 8的行数?
答案 0 :(得分:19)
昨晚我必须解决这个问题,这对我有用。它查找子的宽度并假设所有单元格具有相同的宽度,将GridView的宽度除以子的宽度。 (getColumnWidth()
在早期的API中也不可用,因此解决方法)。
private int getNumColumnsCompat() {
if (Build.VERSION.SDK_INT >= 11) {
return getNumColumnsCompat11();
} else {
int columns = 0;
int children = getChildCount();
if (children > 0) {
int width = getChildAt(0).getMeasuredWidth();
if (width > 0) {
columns = getWidth() / width;
}
}
return columns > 0 ? columns : AUTO_FIT;
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private int getNumColumnsCompat11() {
return getNumColumns();
}
但是,有一些重要的限制需要注意。
setHorizontalSpacing()
添加的任何单元格间距。如果你使用水平间距,你可能需要调整它来解释它。答案 1 :(得分:4)
我解决了V8中缺少getNumColumns的情况,在资源中指定了列数,通过声明一个整数资源并在GridView资源和代码中使用它。
<integer name="num_grid_columns">2</integer>
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
app:columnCount="@integer/num_grid_columns"
app:orientation="horizontal" >
int cols = getResources().getInteger(R.integer.num_grid_columns);
答案 2 :(得分:3)
试试这个:
Math.ceil( (double)gridView.getCount() / (double)gridView.getNumColumns() );
答案 3 :(得分:2)
在此处添加重复的答案,因为我最初回答了duplicate question。
我在我的自定义GridView子类中添加了此实现,并且它按预期工作。我检查了GridView类的声明字段,至少在API 8上它们已经有一个名为mNumColumns
的字段(这是getNumColumns()
在API 18上返回的字段)。他们可能没有将字段名称更改为其他内容,然后在API 8和18之间返回,但我没有检查过。
@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;
}
}
}
@Override不会导致任何错误,因为它只是一个安全检查注释AFAIK。
我也不知道是否有任何反建议这样做而不是单独的getNumColumnsCompat()
方法(如@cottonBallPaws回答),但我发现它非常整洁。
答案 4 :(得分:1)
如果您查看Android API指南中的GridView页面,您会看到有一个名为onItemClickListener
的方法,其中一个参数是位置。与getNumColumns()
一起,您可以获得行数。