レイアウト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では機能しません。
CardViewのデフォルトの標高はImageViewより大きいため、ImageViewでCardViewの標高よりも標高を大きくする必要があります。
例えばimageView.setElevation(10);
およびcardView.setElevation(5);
現在、すべてのデバイスで正常に動作しています。
こうやって
<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
が前面に表示されます。
ImageView
を初期化した後、Javaコードにこの行を記述します。
imageView.bringToFront();
カードビューの上に画像ビューを書き込み、うまくいけば問題が解決します
<?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>
この属性を使用できます
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
の前に表示されます
簡単な方法は、次のようなものを使用することです:
<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を作成できます。
ここにあなたの質問への完全な答えがありますあなたは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);
}
これで画像が前面に表示されます
app:cardElevation="-1dp"
をxmlのCardView
に追加すると、問題が解決します。