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コンストラクターでの操作の順序(ここのソースを参照)は、XMLから属性をadjustViewBounds解析して設定する前に、XMLからプロパティを解析して設定しscaleTypeます。メソッドの一部setAdjustViewBounds()(XML属性値を使用してコンストラクターによって呼び出される)は、値がtrueの場合にをに設定するScaleTypeことです。FIT_CENTER

したがって、投稿したXMLがロードされると、ScaleType最初にに設定されFIT_CENTER、その後に再設定さMATRIXれます。これらはすべてコンストラクター内で行われます。これを代わりにJavaで呼び出す例と比較するとsetAdjustViewBounds()、最後はXML属性が解析された後にJava呼び出しが行われるようになります(事実上、ScaleType属性は無視されます。この違いは、「動作」間で見られるものである可能性があります。と「動作しません」。FIT_CENTERandroid:scaleType="matrix"

グーグルがそれをバグと呼ぶかどうかはわかりません。彼らはScaleTypeアスペクトを維持するための便宜のためにあなたが望むものに設定しているだけですが、それでもあなたはこれを変更することができます。ビュー自体の境界は、プロパティ名の指示に従って変更されます。画像は、予期しない方法でクリップする可能性があります。

ただし、ドキュメントではこの「機能」についてより明確になっている可能性があるため、http://b.android.comでバグレポートを提出できます。

HTH

于 2012-06-06T16:01:50.447 に答える