我想利用scaleType属性,如果我使用LinearLayout
上的background属性设置我的图像,则无法使用该属性。我尝试使用带有2个孩子的LinearLayout
:第一个是ImageView
(用于背景图片),第二个孩子是另一个LinearLayout
包含TextViews
,按钮,但结果只是其他视图后面的图像。
是否有可能以某种方式将嵌套的LinearLayout
浮动到ImageView
上?我知道这个问题有很多变化,但我还没有发现任何对我有帮助的东西。如果我错过了什么,请指出我的方向。另外,如果可能的话,我想用XML做这件事,而且我对可以使用的布局类型(它没有线性)很灵活。
答案 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);
}
}
它看起来像这样: