最初のアイテムとしてCardViewをサポートし、2番目にTextViewをサポートする単純なFrameLayoutがあるので、TextViewはインフレートされたビューの上にある必要があります。これはLolipopより前のバージョンで機能しますが、21 +カードではレイアウトで最も重要な場所になります。なぜそうなのか、そしてこれを修正する方法は? RelativeLayoutでも同じです。レイアウト:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:layout_margin="20dp"
app:cardBackgroundColor="#ff0000"
app:cardUseCompatPadding="false"
/>
<TextView
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:text="i am top view!"
Android:gravity="center"
Android:layout_gravity="center"
Android:textSize="30sp"
Android:textAllCaps="true"
Android:textColor="#00ff00"
Android:background="#0000ff"
/>
</FrameLayout>
フレームレイアウト内でzオーダーが定義されていないことがわかっている限り、カードビュー内にテキストビューを追加するだけですが、最後にレイアウトされたビューは最後に描画する必要があります。
これはおそらく、Lollipopでのカードの表示がLollipopより前の境界線描画コードにフォールバックしているときの標高の使用に関係していると考えられます。
誰かがここに来て、標高を設定するための解決策が彼らのために機能しない場合(私の場合、私がCardView
の上に画像を描く必要があり、それに影を付けることが受け入れられなかった場合)、あなたCardView
を別のFrameLayout
でラップすることで問題を解決できます。提供されている例では、次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<!-- This is the added FrameLayout -->
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:layout_margin="20dp"
app:cardBackgroundColor="#ff0000"
app:cardUseCompatPadding="false"
/>
</FrameLayout>
<TextView
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:text="i am top view!"
Android:gravity="center"
Android:layout_gravity="center"
Android:textSize="30sp"
Android:textAllCaps="true"
Android:textColor="#00ff00"
Android:background="#0000ff"
/>
</FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<!-- Add this layout as parent of CardView -->
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:layout_margin="20dp"
app:cardBackgroundColor="#ff0000"
app:cardUseCompatPadding="false" />
</LinearLayout>
<!--Close parent layout-->
<TextView
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:layout_gravity="center"
Android:background="#0000ff"
Android:gravity="center"
Android:text="i am top view!"
Android:textAllCaps="true"
Android:textColor="#00ff00"
Android:textSize="30sp" />
</FrameLayout>
少し遅れてディスカッションに参加するかもしれませんが、CardView
の標高をあきらめる余裕がある場合は、XMLレイアウトでcardElevation
のCardView
プロパティを設定するだけです。 0dp
。
そのようです:
app:cardElevation="0dp"