4

当我在 imageView xml 中使用 android:adjustViewBounds="true" 时,它不起作用。如果我把 setAdjustViewBounds(true); 在我的 ImageView 的构造函数中,它工作正常。有什么区别,或者这是一个错误?

<ImageView
                android:id="@+id/PageViewMainImage"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:scaleType="matrix"     
                android:adjustViewBounds="true"               
                android:visibility="invisible"/>
4

1 回答 1

16

构造函数中的操作顺序ImageView请参见此处的源代码)在adjustViewBounds从 XML 解析和设置属性之前从 XML 解析并设置scaleType属性。该setAdjustViewBounds()方法的一部分(由构造函数使用您的 XML 属性值调用)是在值为 true 时将设置ScaleType为。FIT_CENTER

因此,当您发布的 XML 被加载时,ScaleType首先设置为FIT_CENTER,然后重新设置为MATRIX,所有这些都在构造函数中。将此与您setAdjustViewBounds()在 Java 中调用的示例进行比较,现在最终ScaleType结果将是FIT_CENTER您的 Java 调用将在解析 XML 属性之后发生(实际上意味着您的android:scaleType="matrix"属性被忽略。这种差异可能是您在“作品”之间看到的和“不起作用”。

我不确定 Google 是否会称其为错误,因为他们只是将 设置ScaleType为他们认为您想要的以方便保留方面,但仍允许您对其进行修改。视图本身的边界仍会随着属性名称的指示而改变,图像可能会以您未预料到的方式剪辑。

不过,文档可能会更清楚地说明此“功能”,因此您可以在http://b.android.com提交错误报告

高温高压

于 2012-06-06T16:01:50.447 回答