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

时间:2013-06-08 22:23:47

标签: android image view imageview scale

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

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

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginBottom="5dp" >

        <View
            android:id="@+cell/divider"
            android:layout_width="fill_parent"
            android:layout_height="2dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:background="#FF000000" />

        <ImageView
            android:id="@+cell/image"
            android:layout_width="fill_parent"
            android:layout_height="100dp"
            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 个答案:

答案 0 :(得分:2)

请参阅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()调用使用第二个参数(容器)来确定用于解释XML的LayoutParams的类型。如果传递null,则忽略所有布局属性。您应该使用实际容器(将自动将其添加到容器中)调用它,或者使用容器调用它,并使用第三个参数告诉它不要附加视图,然后使用膨胀的视图执行您想要的操作。