缩放背景图像来包装布局的内容

我有一个布局,其中包含一些文本字段,并有一个背景图像显示在我的活动的顶部。 我想要背景图像缩放以包装内容(不关心纵横比)。 然而,图像比内容大,所以布局代替了背景图像。 这是我的原始代码:

<RelativeLayout android:layout_width="fill_parent" android:id="@+id/HeaderList" android:layout_gravity="top" android:layout_height="wrap_content" android:background="@drawable/header"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/NameText" android:text="Jhn Doe" android:textColor="#FFFFFF" android:textSize="30sp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:paddingLeft="4dp" android:paddingTop="4dp" /> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#FFFFFF" android:layout_alignParentLeft="true" android:id="@+id/HoursText" android:text="170 hours" android:textSize="23sp" android:layout_below="@+id/NameText" android:paddingLeft="4dp" /> </RelativeLayout> 

在search其他一些问题之后,我发现了这两个问题:

如何包装内容视图而不是后台可绘制?

缩放可绘制的或背景图像?

基于此,我创build了一个带有ImageView的FrameLayout来显示背景。 不幸的是,我仍然无法工作。 我想要的背景图像的高度收缩/展开文本视图的大小,但与FrameLayout,ImageView符合它的父母的大小,我找不到一种方法,使父母适合文字视图布局的大小。 这是我更新的代码:

 <FrameLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <ImageView android:src="@drawable/header" android:layout_width="fill_parent" android:scaleType="fitXY" android:layout_height="fill_parent" /> <RelativeLayout android:layout_width="fill_parent" android:id="@+id/HeaderList" android:layout_gravity="top" android:layout_height="wrap_content" > <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/NameText" android:text="John Doe" android:textColor="#FFFFFF" android:textSize="30sp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:paddingLeft="4dp" android:paddingTop="4dp" /> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#FFFFFF" android:layout_alignParentLeft="true" android:id="@+id/HoursText" android:text="170 hours" android:textSize="23sp" android:layout_below="@+id/NameText" android:paddingLeft="4dp" /> </RelativeLayout> </FrameLayout> 

有没有人有任何build议如何最好地使图像缩放到一些布局的内容的大小? 我并不关心图像的宽高比,因为它没关系,我只是想填充背景。

谢谢!

我有同样的问题(我认为),我能find的唯一解决scheme是:

 <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/some_image" android:layout_alignTop="@+id/actual_content" android:layout_alignBottom="@id/actual_content" android:layout_alignLeft="@id/actual_content" android:layout_alignRight="@id/actual_content" /> <LinearLayout android:id="@id/actual_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" > <!-- more stuff ... --> </LinearLayout> </RelativeLayout> 

你可以试试这个技巧,

  • FrameLayout(wrapcontent,wrapcontent)
    • ImageView(匹配父,匹配父)//它的背景
    • LinearLayout(wrapcontent,wrapcontent)
      • 你所有的内容都进入这个线性布局或任何你想要的任何其他types

使用RealtiveLayout(不是必须的,而是FrameLayout,并使用android:scaleType =“fitXY”。将imageView移动到包含文本android:id =“@ + id / HeaderList”的RealtiveLayout,并取消背景android:background =“@绘制/标题“在这个级别。

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/principal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/header" > <RelativeLayout android:layout_width="fill_parent" android:id="@+id/HeaderList" android:layout_gravity="top" android:layout_height="wrap_content" > <ImageView android:id="@+id/backImg" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerInParent="true" android:adjustViewBounds="true" android:background="@color/blancotransless" android:src="@drawable/header" android:scaleType="fitXY" > </ImageView> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/NameText" android:text="John Doe" android:textColor="#FFFFFF" android:textSize="30sp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:paddingLeft="4dp" android:paddingTop="4dp" /> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#FFFFFF" android:layout_alignParentLeft="true" android:id="@+id/HoursText" android:text="170 hours" android:textSize="23sp" android:layout_below="@+id/NameText" android:paddingLeft="4dp" /> </RelativeLayout> </RelativeLayout> 

或多或less它应该工作!

创build一个可绘制的XML,比如mybackground.xml

 <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/header" android:gravity="fill" /> 

然后在你的RelativeLayout中的第一个代码片段中使用

 android:background="@drawable/mybackground" 

我觉得我过去做过类似的事情,试着在图像视图中使用重力设置,我认为其中一个应该做你以后的事情。

我还没有尝试过,但如果您在onCreate上dynamic地设置背景图像,可能工作。 布局的大小应该已经设置好了。

你可以使用这个:

 <ImageView ... android:scaleType="fitXY" > 

希望它有帮助)))

试试这个代码…..

 <LinearLayout android:layout_width="fill_parent" android:id="@+id/HeaderList" android:orientation="vertical" android:layout_gravity="top" android:layout_height="wrap_content" android:background="@drawable/header"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/NameText" android:text="Jhn Doe" android:textColor="#FFFFFF" android:textSize="30sp" android:paddingLeft="4dp" android:paddingTop="4dp" /> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#FFFFFF" android:id="@+id/HoursText" android:text="170 hours" android:textSize="23sp" android:paddingLeft="4dp" /> </LinearLayout>