So legen Sie die Auffüllung für das CardView-Widget in Android L fest




padding android-5.0-lollipop (3)

CardView sollte dies mit den contentPadding Attributen behandeln :

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_gravity="center"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    card_view:cardCornerRadius="2dp"
    card_view:contentPaddingLeft="20dp"
    card_view:contentPaddingRight="@dimen/activity_horizontal_margin"
    card_view:contentPaddingTop="20dp"
    card_view:contentPaddingBottom="@dimen/activity_vertical_margin">

    <TextView
        android:id="@+id/info_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello World!"/>
</android.support.v7.widget.CardView>

Ich benutze android:paddingLeft und android:paddingTop , um die Auffüllung für das neue CardView Widget CardView aber es funktioniert nicht.

Ich kann den Rand für alle Steuerelemente in der CardView als Workaround CardView aber das ist ein Schmerz, wenn es zu viele Steuerelemente gibt.

Wie setze ich das Padding für das neue Cardview Widget?

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_gravity="center"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:paddingLeft="20dp"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="20dp"
    android:paddingBottom="@dimen/activity_vertical_margin"
    card_view:cardCornerRadius="2dp">

    <TextView
        android:id="@+id/info_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello World!"/>
</android.support.v7.widget.CardView>

CardView vor der L-Vorschau verwendet RoundRectDrawableWithShadow zum Zeichnen des Hintergrunds, wodurch Drawable.getPadding() überschrieben Drawable.getPadding() , um einen Schattenabstand hinzuzufügen. Der Hintergrund der Ansicht wird über den Code nach dem Aufblasen festgelegt, wodurch die in XML angegebene Auffüllung überschrieben wird.

Sie haben zwei Möglichkeiten:

  1. Setze Padding zur Laufzeit mit View.setPadding() und View.setPadding() auf die Schatten auf (aber nur vor der L-Vorschau!).
  2. Platzieren Sie alles in einem Layout, das das Auffüllen angibt.

Die letztere Option ist am sichersten.

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_gravity="center"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    card_view:cardCornerRadius="2dp">

    <FrameLayout
        android:paddingLeft="20dp"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="20dp"
        android:paddingBottom="@dimen/activity_vertical_margin">

        <TextView
            android:id="@+id/info_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Hello World!"/>
    </FrameLayout>
</android.support.v7.widget.CardView>

Wenn Sie das CardView-Padding auf Pre-L-Geräten verwenden und es auf Lollipop + -Geräten gleich aussehen lassen möchten, müssen Sie setUseCompatPadding(true) oder die XML-Variante cardUseCompatPadding="true" .

Dies liegt daran, dass "CardView eine zusätzliche Füllung hinzufügt, um Schatten auf Plattformen vor L zu zeichnen." [1] In der Standardimplementierung sehen die verschiedenen API-Versionen also anders aus und die Ansichten sind möglicherweise nicht richtig ausgerichtet. Also, der einfachste Weg, um dieses Problem zu beheben, ist die oben genannten Möglichkeiten, oder verwenden Sie stattdessen Ränder.

Beispielcode

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_context"
    card_view:cardUseCompatPadding="true"
    card_view:contentPadding="8dp"
    card_view:cardCornerRadius="4dp" >

    ...

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

Quellen

[1] CardView.setUseCompatPadding(boolean)

[2] android.support.v7.cardview:cardUseCompatPadding







android-cardview