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>
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:
View.setPadding()
ein und passen Sie die Schatten an (jedoch nur vor der L-Vorschau!).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>
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>
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.
<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>
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
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.