webentwicklung-frage-antwort-db.com.de

So stellen Sie die Auffüllung für das CardView-Widget in Android L ein

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

Ich kann den Rand für alle Steuerelemente in der CardView als Problemumgehung festlegen, aber das ist ein Schmerz, wenn zu viele Steuerelemente vorhanden sind. 

So legen Sie die Auffüllung für das neue Cardview-Widget fest

<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>
58
nomongo

CardView vor der L-Vorschau zeichnet RoundRectDrawableWithShadow zum Zeichnen des Hintergrunds, wodurch Drawable.getPadding() überschrieben wird, um Schattenfüllung hinzuzufügen. Der Ansichtshintergrund wird nach dem Aufblasen über Code festgelegt, wodurch alle in XML angegebenen Auffüllungen überschrieben werden.

Sie haben zwei Möglichkeiten: 

  1. Stellen Sie den Abstand zur Laufzeit mit View.setPadding() ein und passen Sie die Schatten an (jedoch nur vor der L-Vorschau!).
  2. Platzieren Sie alles in einem Layout, das die Auffüllung 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>
58
alanv

CardView sollte dies mit den Attributen contentPadding behandeln, die mit geliefert werden:

<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>
164
yarian

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

Dies liegt daran, dass "CardView zusätzliche Füllungen hinzufügt, um Schatten auf Plattformen vor L. zu zeichnen." [1] Die Standardimplementierung sieht also vor, dass die verschiedenen API-Versionen unterschiedlich aussehen und die Ansichten möglicherweise nicht richtig ausgerichtet sind. Der einfachste Weg, dieses Problem zu beheben, besteht also in den oben angegebenen Wegen. 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

28
Anonsage

Ich bin hierher gekommen, um nach einer Lösung zu suchen, wie das Auffüllen von CardView in styles.xml festgelegt werden kann, da Android:padding nicht funktioniert hat. (Ich weiß, dass dies nicht das ist, wonach Wat OP gefragt hat, aber ich glaube, es hängt damit genug zusammen.)

In styles.xml kann das Auffüllen einfach mit contentPadding festgelegt werden.

<style name="myCardViewStyle" parent="CardView">
    <item name="contentPadding">20dp</item>

Diese Lösung dient zum Festlegen des Füllstilattributs für CardView in styles.xml

0
O95

Das hat bei mir funktioniert - jeder Gegenstand wird in ein Rahmenlayout gestellt 

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
 Android:layout_marginBottom="-4dp">

   <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:background="@color/white_three"
            Android:orientation="vertical"
            card_view:cardCornerRadius="2dp"
            card_view:cardElevation="@dimen/card_elevation"
            card_view:cardMaxElevation="0dp"
            card_view:cardPreventCornerOverlap="false"
            card_view:cardUseCompatPadding="true"
   </Android.support.v7.widget.CardView>

Vergewissern Sie sich, dass card_view " http://schemas.Android.com/apk/res-auto " ist und keine Tools. Außerdem müssen Sie in der Frame-Ansicht negative Ränder festlegen, um Schatten zu erhalten.