CardView
を使用しようとしましたが、5.0より下ではうまく動作しますが、Lollipopでは奇妙に見えます。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin">
<Android.support.v7.widget.CardView Android:layout_width="match_parent"
Android:layout_height="200dp">
<TextView
Android:id="@+id/textView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="card1"
Android:textAppearance="?android:attr/textAppearanceLarge" />
</Android.support.v7.widget.CardView>
<Android.support.v7.widget.CardView Android:layout_width="match_parent"
Android:layout_height="200dp">
<TextView
Android:id="@+id/textView2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="card2"
Android:textAppearance="?android:attr/textAppearanceLarge" />
</Android.support.v7.widget.CardView>
</LinearLayout>
RecyclerView
を使用するときに同じ質問に答えますが、Lollipopで実行する場合は何かを追加する必要がありますか?
これをCardView
に設定します:
app:cardUseCompatPadding="true"
ドキュメントから:
API v21 +にもパディングを追加して、以前のバージョンと同じ測定値を取得します。
カードビュー内で次の2つのタグを使用します。
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="true"
最初の画像は、カードビューの予想される動作です。カードに標高がある場合、影は最下層に落ちます。 Lollipop以前のデバイスでは、パディングを追加することで標高が作成されます。そのため、Lollipop以前のデバイスでは、カードビューの周りにパディングがあります。
Lの前に、CardViewはそのコンテンツにパディングを追加し、その領域に影を描きます。このパディング量は、maxCardElevation +(1-cos45)*側面のcornerRadiusとmaxCardElevation * 1.5 +(1-cos45)*上下のcornerRadiusに等しくなります。
app:cardUseCompatPadding="true"
をCardview
に追加する必要があります。ただし、追加するだけでエラーが発生する場合があります。このエラーを回避するには、xmlns:app="http://schemas.Android.com/apk/res-auto"
をCardView
に追加する必要もあります。
例えば、
<Android.support.v7.widget.CardView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_height="wrap_content"
Android:layout_width="match_parent"
app:cardUseCompatPadding="true">
// Other views here
</Android.support.v7.widget.CardView>
上記の代わりにcard_view:cardUseCompatPadding="true"
とxmlns:card_view="http://schemas.Android.com/apk/res-auto"
を追加する人もいます。どちらの方法も正しいです。
XML(Android)のappについて詳しく知りたい場合は、この answer をご覧ください。
以前の回答で問題は解決しますが、各属性の機能については説明しませんでした。そのため、求職者の回答に役立つように、
cardPreventCornerOverlap
属性は、v20以前のCardViewにパディングを追加して、カードコンテンツと丸い角の交差を防ぎます。
cardUseCompatPadding
属性は、API v21 +のパディングも追加して、以前のバージョンと同じ測定値を取得します。