android - 将布局参数设置为 ImageView 时出错

标签 android android-layout android-linearlayout android-imageview

我在尝试将 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

纵向和横向布局的主要区别在于,纵向使用垂直方向的 LinearLayoutGallery 小部件(使用该 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/

相关文章:

Android 4.1 - 使用 VideoView 和 MediaController 的 RTSP

Android - 将 mp3 音频添加到 mp4 视频

java - LinearLayout问题[Android]

java - 建议在移动设备上使用对象池 : evil on desktop,。这怎么可能?

android - 使用最新的 com.jakewharton.rxbinding3 :rxbinding:3. 0.0-alpha2 库时未找到 RxTextView 和其他小部件

android - 如何将 LinearLayout 放置在另一个 RelativeLayout 内的 LinearLayout 下方?

java - Android 为什么不能在 Toolbar 中使用 TextView

android - 在代码中为 textview 设置样式,android

android - 在 LinearLayout 中对齐 TextView 和 ImageView

java - 重新打开应用程序时,布局颜色更改不会保留