使用ImageView作为Android布局的背景

时间:2014-01-05 00:58:43

标签: android android-layout android-imageview android-xml android-background

我想利用scaleType属性,如果我使用LinearLayout上的background属性设置我的图像,则无法使用该属性。我尝试使用带有2个孩子的LinearLayout:第一个是ImageView(用于背景图片),第二个孩子是另一个LinearLayout包含TextViews,按钮,但结果只是其他视图后面的图像。

是否有可能以某种方式将嵌套的LinearLayout浮动到ImageView上?我知道这个问题有很多变化,但我还没有发现任何对我有帮助的东西。如果我错过了什么,请指出我的方向。另外,如果可能的话,我想用XML做这件事,而且我对可以使用的布局类型(它没有线性)很灵活。

2 个答案:

答案 0 :(得分:24)

我这样使用RelativeLayout作为父:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="#000000" >

    <ImageView
        style="@style/BackGroundImageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="42dp"
        tools:ignore="ContentDescription" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal"
        android:orientation="vertical" >

        <!--Rest of widgets......-->

    </LinearLayout>

</RelativeLayout>

我的风格:

<style name="BackGroundImageView">
    <item name="android:alpha">0.5</item>
    <item name="android:scaleType">fitXY</item>
    <item name="android:src">@drawable/img_background</item>
</style>

我使用了一种风格,因为alpha设置不适用于较低的API(不记得限制是什么)。

答案 1 :(得分:0)

由于具有适配器,并且无法将图像设置为显示在GridView中,因此无法在上面使用。因此,在2019年,我的行为如下:

<RelativeLayout
    android:id="@+id/relativeLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_gravity="center">

    <your_package_name.directory.SquareImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:layout_centerInParent="true"
        android:id="@+id/gridImageView"/>

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerInParent="true"
        android:paddingStart="6dp"
        android:paddingEnd="6dp"
        android:paddingTop="3dp"
        android:paddingBottom="3dp"
        android:textColor="@android:color/white"
        android:background="@drawable/shape_image_holder_text"
        android:alpha=".85"
        android:scaleType="centerCrop"
        android:textSize="24sp"/>
</RelativeLayout>

此处“堆叠”视图的关键属性是android:layout_centerInParent="true"

还要注意,我创建了android:background="@drawable/shape_image_holder_text"来获得带有某些背景的文本视图周围的某些拐角半径。这是xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <solid android:color="#22000000" />
            <stroke
                android:color="#33000000"
                android:alpha="0.6"
                android:width="1dp" />
            <corners android:radius="12dp" />
        </shape>
    </item>
</selector>

要使我的图像在GridView中调整为高度和宽度,使其大小相同。我为SquareImageView创建了一个自定义类(如果您不使用ImageView或对此不关心,则可以使用默认的GridView。)

我的SquareImageView.java文件:

import android.content.Context;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;

public class SquareImageView extends AppCompatImageView {

    public SquareImageView(Context context) {
        super(context);
    }

    public SquareImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        //noinspection SuspiciousNameCombination
        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
    }

    public SquareImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

它看起来像这样:

enter image description here