我在尝试将 layoutparams
设置为以编程方式创建的 ImageView
时遇到问题:
imageView.setLayoutParams(new LinearLayout.LayoutParams(gallerySize.x, gallerySize.y));
imageView 位于 LinearLayout
中,我认为这应该可行,但我收到此错误:
09-30 10:33:24.450: ERROR/AndroidRuntime(5418): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams
也许是因为这个 imageView Activity 被配置为对纵向和横向 View 使用不同的布局(我在 layout-land 文件夹中使用了不同的 xml 布局副本)。当它处于纵向 View 时,有问题的代码行没有被执行,而是执行了以下行:
imageView.setLayoutParams(new Gallery.LayoutParams(gallerySize.x, gallerySize.y));
我试图保持这一行不变,但后来我得到了错误:
09-30 10:49:47.450: ERROR/AndroidRuntime(5760): java.lang.ClassCastException: android.widget.Gallery$LayoutParams
纵向和横向布局的主要区别在于,纵向使用垂直方向的 LinearLayout
和 Gallery
小部件(使用该 imageView),而有问题的景观使用水平方向和 ListView
而不是 Gallery
。
我有点迷路了,任何提示都将不胜感激。
已编辑
imageView是在这个类中实现的:
public class ImageAdapter extends BaseAdapter {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
Bitmap temp = BitmapFactory.decodeFile(appFolder+"/"+imagesPath[position]);
//productImages[position] = temp;
imageView.setImageBitmap(temp);
if(landscape)
imageView.setLayoutParams(new LinearLayout.LayoutParams(gallerySize.x, gallerySize.y));
else
imageView.setLayoutParams(new Gallery.LayoutParams(gallerySize.x, gallerySize.y));
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
imageView.setBackgroundResource(mGalleryItemBackground);
return imageView;
}
}
这里使用了 ImageAdapter 实例:
public onCreate(...) {
...
if(!landscape) {
Gallery gallery = (Gallery) findViewById(R.infoproduto.gallery);
gallery.setAdapter(new ImageAdapter(this));
gallery.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View v, int position, long id) {
setSelectedImage(position);
}
});
}
else {
ListView galleryLView = (ListView) findViewById(R.infoproduto.galleryLView);
galleryLView.setAdapter(new ImageAdapter(this));
galleryLView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View v, int position, long id) {
setSelectedImage(position);
}
});
}
}
最佳答案
好吧,我找到了解决方案,很明显!
ImageView 在 ImageAdapter 内部使用,这个 ImageAdapter 在 ListView 实例中设置为适配器:
ListView galleryLView = (ListView) findViewById(R.infoproduto.galleryLView);
galleryLView.setAdapter(new ImageAdapter(this));
所以我使用了 ListView.LayoutParams 而不是使用 LinearLayout.LayoutParams(这是我的 xml 文件中唯一的布局),它工作得很好!
关于android - 将布局参数设置为 ImageView 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7611396/