Android 缩放背景图像以包裹版面内容
我有一个包含一些文本字段的布局,并在活动顶部显示一个背景图像。我希望背景图像的规模,以包装的内容(不关心高宽比)。但是,图像比内容大,因此布局会包裹背景图像。这是我的原始代码:Android 缩放背景图像以包裹版面内容,android,background,android-linearlayout,android-relativelayout,android-framelayout,Android,Background,Android Linearlayout,Android Relativelayout,Android Framelayout,我有一个包含一些文本字段的布局,并在活动顶部显示一个背景图像。我希望背景图像的规模,以包装的内容(不关心高宽比)。但是,图像比内容大,因此布局会包裹背景图像。这是我的原始代码: <RelativeLayout android:layout_width="fill_parent" android:id="@+id/HeaderList" android:layout_gravity="top" android:layout_height="wrap_con
<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>
在搜索了其他一些问题后,我发现了以下两个问题:
基于此,我创建了一个框架布局,其中包含一个显示背景的ImageView。不幸的是,我仍然无法让它工作。我希望背景图像的高度随文本视图的大小而缩小/扩大,但在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>
对于如何最好地将图像缩放到某个版面内容的大小,有人有什么建议吗?我不关心图像的纵横比,因为这无关紧要,我只想让它填充背景
谢谢 我想我以前也做过类似的事情,试着在图像视图中使用重力设置,我想其中一个应该做你想做的事情。我没有尝试过,但是如果你在onCreate上动态设置背景图像,这可能行得通。布局的大小应该已经设置。创建一个可绘制的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" />
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<item>
<bitmap
android:gravity="center"
android:src="@drawable/ic_background_image" />
</item>
</layer-list>
您可以使用以下选项:
<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>
使用RealtiveLayout(不是强制性的,而是FrameLayout,并使用android:scaleType=“fitXY”)。将imageView移动到RealtiveLayout,其中包含文本视图android:id=“@+id/HeaderList”,并在此级别取消设置背景android:background=“@drawable/header”
<?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>
或多或少它会起作用的!你可以试试这个把戏
- 框架布局(wrapcontent,wrapcontent)
- ImageView(匹配父对象,匹配父对象)//它是您的背景
- 线性布局(wrapcontent,wrapcontent)
- 你所有的内容都在这个线性布局或任何其他你想要的类型中
- 我也有同样的问题(我想),我能找到的唯一解决办法是:
<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>
最简单的解决方案: ic_background.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" />
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<item>
<bitmap
android:gravity="center"
android:src="@drawable/ic_background_image" />
</item>
</layer-list>
谢谢你的建议。我试过在ImageView和RelativeLayout上使用layout_重力参数,但运气不太好。我试过“剪辑”和“填充”选项,以及它们和其他定位值的各种组合,它们似乎都没有任何效果。你还记得你使用的比重值吗?我尝试了这个,但在我的情况下,它不起作用。视图组的大小仍然调整为包含背景图像。这对我来说是有效的,但做了一些修改。-使用ImageView而不是View-在ImageView中添加了android:scaleType=“fitXY”对于不想浪费10分钟的人,为了引用之后声明的视图,您需要添加一个
@+id/
的@id/
实例来创建id。对我来说,它不起作用,因为ImageView比它的容器大:(您可以定义ImageView…的大小,并使用scaleType相应地调整图像。)