我的LinearLayout
宽度设置为fill_parent
,高度设置为wrap_content
。现在我想从png文件中给它一个背景,但是以传统的方式进行操作会导致LinearLayout
调整大小以显示整个背景而不是裁剪其他部分。
如何设置LinearLayout
的背景,以便它不会调整大小?
由于
答案 0 :(得分:31)
似乎只有使用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>
答案 1 :(得分:6)
背景位图的默认行为是完全填充容器,并根据需要增大容器的水平和垂直尺寸。解决方案是创建可绘制的位图资源并更改重力。
检查以下链接并查找可能的重力值。您的视图应该只引用可绘制资源,您应该没问题。
http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap
答案 2 :(得分:1)
我通过继承LinearLayout
并重写onMeasure(int,int)
回调来解决这个问题,然后更新布局XML以使用我的新布局类型。我不能自由发布那些确切的代码,但我所做的是调用super.onMeasure(int,int)
实现并检查测量的高度是否返回到我的背景图像的确切高度。如果是这样,我抓住所有子视图的测量高度,然后计算新的高度值并将其传递给setMeasuredDimension(int,int)
。
答案 3 :(得分:-2)
将此代码放在xml活动中,例如activity_main.xml
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/image" />