web-dev-qa-db-ja.com

imageViewをcardviewの前に表示するにはどうすればよいですか?両方が相対レイアウトの子である場合

レイアウトXMLがあります。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/containor"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="#fff6da"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.vats.vatishs.cardviewprogrammatically.MainActivity">

        <FrameLayout
            Android:id="@+id/card"
            Android:layout_width="220dp"
            Android:layout_marginTop="10dp"
            Android:layout_height="wrap_content">

            <TextView
                Android:background="@color/white"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:padding="10dp"
                Android:text="Hello I am a text View." />

        </FrameLayout>

    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginLeft="210dp"
        Android:background="@drawable/select_delete_chim" />

</RelativeLayout>

これは正常に動作します。結果はフレームレイアウトの上のイメージビューになりますが、フレームレイアウトをCardViewに置き換えた次のxmlを使用すると、

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/containor"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="#fff6da"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.vats.vatishs.cardviewprogrammatically.MainActivity">

        <Android.support.v7.widget.CardView
            Android:id="@+id/card"
            Android:layout_width="220dp"
            Android:layout_marginTop="10dp"
            Android:layout_height="wrap_content">

            <TextView
                Android:background="@color/white"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:padding="10dp"
                Android:text="Hello I am a text View." />

        </Android.support.v7.widget.CardView>

    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginLeft="210dp"
        Android:background="@drawable/select_delete_chim" />
</RelativeLayout>

結果はCardViewの背面にあるImageViewになります。

これに対する解決策はありますか?

さらに、Lollipop以前のデバイスでは問題なく機能しますが、Lollipopでは機能しません。

Lollipop以前のデバイスでのCardViewによる出力(必須の出力)

LollipopデバイスのCardViewでの出力

16
Vatish Sharma

CardViewのデフォルトの標高はImageViewより大きいため、ImageViewでCardViewの標高よりも標高を大きくする必要があります。

例えばimageView.setElevation(10);およびcardView.setElevation(5);

現在、すべてのデバイスで正常に動作しています。

49
Vatish Sharma

こうやって

<Android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.Android.com/apk/res-auto"
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/myCardView"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    card_view:cardBackgroundColor="@Android:color/transparent"
    card_view:cardElevation="0dp">

        <ImageView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:src="@drawable/ic_edit"
            Android:background="@Android:color/transparent"/>

</Android.support.v7.widget.CardView>

ImageViewが前面に表示されます。

3
priyanka

ImageViewを初期化した後、Javaコードにこの行を記述します。

imageView.bringToFront();

2
Eric B.

カードビューの上に画像ビューを書き込み、うまくいけば問題が解決します

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/containor"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="#fff6da"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.vats.vatishs.cardviewprogrammatically.MainActivity">

    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginLeft="210dp"
        Android:src="@drawable/select_delete_chim" />

        <Android.support.v7.widget.CardView
            Android:id="@+id/card"
            Android:layout_width="220dp"
            Android:layout_marginTop="10dp"
            Android:layout_height="wrap_content">

            <TextView
                Android:background="@color/white"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:padding="10dp"
                Android:text="Hello I am a text View." />

        </Android.support.v7.widget.CardView>

    </RelativeLayout>
1
Madhur

この属性を使用できます

  app:cardElevation="0dp"

xMlのCardViewに。

このような

   <Android.support.v7.widget.CardView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        app:cardElevation="0dp"
        app:cardUseCompatPadding="true">

これにより、他のビューがCardViewの前に表示されます

1
Islam Alshnawey

簡単な方法は、次のようなものを使用することです:

<RelativeLayout  
Android:layout_width="match_parent"
    Android:orientation="vertical"
    Android:layout_height="match_parent">  

<LinearLayout
    Android:layout_width="match_parent"
    Android:orientation="vertical"
    Android:layout_height="wrap_content">

<Android.support.v7.widget.CardView
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">
....
</Android.support.v7.widget.CardView>
</LinearLayout>

<ImageView
Android:layout_width="wrap_parent"
    Android:layout_height="wrap_content">

これは、カードビューの高度によるものであることに注意してください。デフォルトの標高はImageViewよりも大きいです。このように、LinearLayoutを使用してCardViewをその中に配置できます。次に、RelativeLayoutを使用して、CardViewの上にImageViewを作成できます。

0
Hossein Karami

ここにあなたの質問への完全な答えがありますあなたはFrameLayoutでCardViewをラップし、そのようなCardViewの親の外側にImageViewを置くことができます

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout ...>
    <FrameLayout...>
        <Android.support.v7.widget.CardView...>
            <Content/>
        </Android.support.v7.widget.CardView>
    </FrameLayout>
    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        ... />
</RelativeLayout>

または、JavaをサポートするコードAndroid Lollipop以降のバージョン

image.bringToFront();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
     image.setElevation(10);
}

これで画像が前面に表示されます

0
Nick Sherbina

app:cardElevation="-1dp"をxmlのCardViewに追加すると、問題が解決します。

0
Whales_Corps