如何解决Android GridView 不显示图像
我制作了一个带有 GridView
的 ImageAdapter
但它没有显示里面的图像。
我尝试更改 numColumns
、columnWidth
和其他属性,但没有奏效。
在 Android Studio xml 设计面板中,我可以看到我的 Gridview。
这是我的 gridview
布局文件中的 xml
:
<GridView
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/linear_buttons"
android:layout_above="@+id/btnSearch"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:background="@null"
android:columnWidth="120dp"
android:gravity="center"
android:numColumns="auto_fit"
android:stretchMode="columnWidth" />
这是我的适配器:
public class CustomGridViewAdapter extends BaseAdapter {
private final Context mContext;
public CustomGridViewAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position,View convertView,ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(R.dimen.grid_dimens_width,R.dimen.grid_dimens_height));
imageView.setScaleType(ImageView.ScaleType.CENTER);
imageView.setPadding(1,5,1,1);
} else {
imageView = (ImageView) convertView;
}
imageView.setimageResource(mThumbIds[position]);
return imageView;
}
private final Integer[] mThumbIds = {
R.drawable.grid_agapis,R.drawable.grid_asteies,R.drawable.grid_auto,R.drawable.grid_gamos,R.drawable.grid_goneis,};
我使用以下代码设置了适配器:
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new CustomGridViewAdapter(this));
gridview.setonItemClickListener(this);
你能解释一下问题出在哪里吗? 谢谢。
解决方法
imageView.setLayoutParams(new GridView.LayoutParams(R.dimen.grid_dimens_width,R.dimen.grid_dimens_height));
通过这行代码,您试图将抓取的可绘制对象的大小限制为固定的宽度和高度,分别等于 grid_dimens_width
和 grid_dimens_height
。
但实际上使用 R.dimen.foo
不会返回 foo
的值,而是返回资源本身生成的整数值,它可以是一个大数字(例如 -21893103 或 33238590) .. 这会让你在屏幕上看不到任何东西,因为图像是:
- 太大(在资源值为 33238590 的情况下)所以您会看到它的微小像素
- 或太小(如果资源值为负 -21893103),因为其大小为零。
您需要做的是使用 getDimention()
获取 dimen
资源并将资源 ID 传递给它。
要将其应用于您的代码:
替换:
imageView.setLayoutParams(new GridView.LayoutParams(R.dimen.grid_dimens_width,R.dimen.grid_dimens_height));
与:
imageView.setLayoutParams(new GridView.LayoutParams(
(int) mContext.getResources().getDimension(R.dimen.grid_dimens_width),(int) mContext.getResources().getDimension(R.dimen.grid_dimens_height)));
结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。