2015-10-01 4 views
6

Ich versuche, einigen Ansichten in einer App Rundungen und Schatten hinzuzufügen und nutze dazu die Kartenansichts-Bibliothek. Es sieht auf Lollipop-Geräten gut aus, aber es gibt Kompatibilitätsprobleme mit allem, was vor dem Lollipop ist.White Space mit CardView auf Pre-Lollipop-Geräten

Ich werde das vorweg bringen, indem ich sage, dass ich die Antworten in den folgenden Fragen betrachtet habe, dass keine von ihnen für mich arbeiten.

Die populärste Antwort war das Attribut 'cardPreventOverlap = false', aber diese entfernt die abgerundeten Ecken hinzuzufügen. Ich habe Variationen dieser Flagge und 'cardUseCompatPadding = "true"' versucht, aber keiner von ihnen scheint den Trick zu machen. Hat jemand anderes das gleiche Problem?

Mein Code:

<android.support.v7.widget.CardView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="8dp" 
    card_view:cardCornerRadius="4dp"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/selector" 
     android:gravity="center" 
     android:orientation="horizontal" > 

     <ImageView 
      android:layout_width="44dp" 
      android:layout_height="match_parent" 
      android:layout_marginRight="4dp" 
      android:background="@color/mid_yellow" 
      android:padding="0dp" 
      android:src="@drawable/ic_add_white_24dp" /> 

     <TextView 
      style="@style/Text.Primary.White" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="4dp" 
      android:text="Button" /> 
    </LinearLayout> 

Dies ist, wie es zur Zeit auf Android 5.0 aussieht:

enter image description here

Die exakt gleichen Code auf 4.4.2 wie folgt angezeigt:

enter image description here

Mit 'cardPreventOverlap = false':

enter image description here

aktualisieren Leider waren wir das Problem zu lösen, nicht in der Lage; Angesichts der Tatsache, dass die App nur eine kleine Installationsbasis vor 5.0 hatte, entschieden wir uns, dass es nicht wichtig war. Am Ende ging die dritte Option 'cardPreventOverlap = false'.

Antwort

0

Statt card_view:cardCornerRadius verwenden Sie die background des cardview einstellen können mit einem drawable wie:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#FFFFFF"/> 
    <corners android:radius="4dip"/> 
</shape> 

Sie können dies auch in Ihrem cardview so für jedes Element tun, dass Sie die richtige Hintergrundfarbe für jedes Element haben . In diesem Fall können Sie angeben, nur bestimmte Ecken mit:

<corners 
    android:topLeftRadius="4dp" 
    android:bottomLeftRadius="4dp"/> 

Für Ihre + Taste zum Beispiel.

Verwenden Sie diese in Kombination mit cardUseCompatPadding="true"

+0

ich fürchte, das es nicht anders aussehen macht. Wenn jedes Element eine Form wäre, dann würde ja die Ecke bei jeder Form UND mit cardPreventCornerOverlap = "false" funktionieren, aber es gibt auch Bilder und andere Ansichten an einigen Stellen, wo ich es brauche, in denen ich die Ecken nicht ändern kann. – RobVoisey

+0

Aber du kannst es einfach auf dein 'linearlayout' legen nein? Mit einer transparenten Hintergrundfarbe und negativen Padding sollte es auch funktionieren. –

+0

Es wäre nicht so, dass sich der Hintergrund des linearen Layouts nicht auf seine untergeordneten Elemente auswirkt. Quadratische Kinder würden immer noch in der oberen linken Ecke platziert werden, um den Linearlayouts-Hintergrund abzudecken; Ich möchte, dass auch die Kinder abgerundet werden, alle Kinder sind richtig auf Lollipop gerundet. – RobVoisey

3

Inhalt Clipping wird nicht unterstützt, da bei älteren Geräten recht teuer ist. Wenn Sie möchten, können Sie Carbon verwenden. Es verfügt über eine eigene CardView-Implementierung, die den Inhalt korrekt in abgerundete Ecken schneidet. Carbon fügt allen anderen Layouts auch Content-Clipping und -Erhöhung hinzu, sodass Sie für Ihren Zweck ein LinearLayout mit abgerundeten Ecken und Schatten verwenden können.Siehe das Bild:

enter image description here