Android ImageView 大小在运行时意外更改

Posted

技术标签:

【中文标题】Android ImageView 大小在运行时意外更改【英文标题】:Android ImageView size unexpectedly changing at runtime 【发布时间】:2013-06-08 22:23:46 【问题描述】:

在我的一项活动中,我有一个表格布局,其中包含在运行时通过自定义类添加的单元格。我的单元格的布局如下:

<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+cell/style_2"
    android:layout_
    android:layout_ >

    <RelativeLayout
        android:layout_
        android:layout_
        android:layout_marginBottom="5dp" >

        <View
            android:id="@+cell/divider"
            android:layout_
            android:layout_
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:background="#FF000000" />

        <ImageView
            android:id="@+cell/image"
            android:layout_
            android:layout_
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_below="@cell/divider"
            android:layout_margin="5dp"
            android:contentDescription="@string/row_thumbnail"
            android:scaleType="fitCenter"/>
    </RelativeLayout>

</TableRow>

这会被以下类夸大:

public Cell(Context context) 
    super(context);

    addView(((LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE))
        .inflate(R.layout.gallery_row_1, null));

当我给单元格充气时,我还设置了一个图像用作显示,问题是图像视图的大小没有保持应有的大小,找不到右边缘,并且图像永远不会显示(可能在某个地方偏右?),我不确定我的问题出在哪里。

c = new Cell(this);
c.getImageView().setImageBitmap(BitmapFactory.decodeStream(assetManager.open("categories" + File.separator + sec + File.separator + filename)));
page.addView(c);

getImageView 是我的 Cell 中的一个函数,它返回实际的 ImageView 元素。

我知道图像被放置在 ImageView 中,因为当布局参数更改时,我可以看到图像,只是大小不合适。

所需的输出应该是一个视图,顶部是一个分割视图,下面是一个 ImageView,填充父级并且高 100dp。图像,无论原始尺寸如何,都应缩放并显示在里面。

另外,如果我注释掉我将图像设置为 ImageView 的行,则布局边界是正确的,在启用 Show Layout Bounds 的情况下查看。

我的总体问题是,为什么我的 ImageView 在应用图像时会重新调整大小。

非常感谢任何和所有帮助。

【问题讨论】:

【参考方案1】:

请参阅this post on LayoutInflater,了解您的布局为何会混淆。由于您的单元类似乎是某个 ViewGroup 的内部类(因为您正在调用 addView()),请尝试使用以下代码:

LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.gallery_row_1, this);

LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.gallery_row_1, this, false);
addView (view);

而不是使用

inflater.inflate(R.layout.gallery_row_1, null);

inflate() 调用使用第二个参数(容器)来确定使用什么类型的LayoutParams 来解释 XML。如果传递 null,则忽略所有布局属性。您应该改为使用实际容器调用它(它将自动将其添加到容器中)或使用容器调用它,并使用第三个参数告诉它不要附加视图,然后使用膨胀视图执行您想要的操作.

【讨论】:

我爱你。谢谢! :D 我花了整整 2 个小时来玩弄 XML 配置,试图让一切都正确...

以上是关于Android ImageView 大小在运行时意外更改的主要内容,如果未能解决你的问题,请参考以下文章

android中imageview里的图片大小是不是可以比imageview本身大,如果可以,如何设置?

android. imageview是如何控制它的宽高比例,不让各种规则图片影响它大小。如图。图片

调整imageView大小后调整图像大小

android中关于ImageView的问题

Android将imageview放在大小相同的其他imageview上[关闭]

Android ImageView 调整大小问题