8

我想利用 scaleType 属性,如果我使用LinearLayout. 我尝试使用LinearLayout带有 2 个孩子的 a:第一个是ImageView(用于背景图像),第二个孩子是另一个LinearLayout包含TextViews、按钮等。但结果只是图像后面跟着其他视图。

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

4

2 回答 2

27

因此,我使用 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(不记得限制是什么)。

于 2014-01-05T01:08:05.070 回答
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>

Stacking 视图的关键属性是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你可以使用默认值)。ImageViewGridView

我的 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);
    }
}

它看起来像这样:

在此处输入图像描述

于 2019-12-24T03:28:51.717 回答