幅がfill_parent
に設定され、高さがwrap_content
に設定されたLinearLayout
があります。ここでpngファイルから背景を与えたいのですが、従来の方法でそれを行うと、LinearLayout
のサイズが変更され、追加の部分をトリミングする代わりに背景全体が表示されます。
サイズを変更しないようにLinearLayout
の背景を設定するにはどうすればよいですか?
ありがとう
このようなことは、ImageView
を使用し、それに応じてscaleType
パラメータを設定することでのみ達成できるようです。簡単な回避策は、FrameLayout
を使用し、ImageView
を背景が透明な別のレイアウトの下に配置することです。
コード:
<FrameLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<ImageView
Android:id="@+id/imageView1"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scaleType="centerCrop"
Android:src="@drawable/background" />
</FrameLayout>
背景ビットマップのデフォルトの動作は、コンテナーを完全に塗りつぶし、必要に応じてコンテナーの水平および垂直サイズを拡大することです。解決策は、描画可能なビットマップリソースを作成し、重力を変更することです。
次のリンクをチェックして、可能な重力値を探してください。これで、ビューはドローアブルリソースを参照するだけになり、問題はありません。
http://developer.Android.com/guide/topics/resources/drawable-resource.html#Bitmap
これを解決するには、LinearLayout
をサブクラス化し、onMeasure(int,int)
コールバックをオーバーライドしてから、レイアウトXMLを更新して新しいレイアウトタイプを使用します。私はその正確なコードを投稿する自由はありませんが、私がしたことはsuper.onMeasure(int,int)
実装を呼び出し、測定された高さが私の背景画像の正確な高さとして戻ったかどうかを確認することでした。その場合は、すべての子ビューの測定された高さを取得し、新しい高さの値を計算して、それをsetMeasuredDimension(int,int)
に渡します。