Wie erstelle ich eine Form mit einer abgerundeten Ecke links oben und einer abgerundeten Ecke links unten?

84

Ich möchte eine Form mit links oben abgerundeter Ecke und links unten abgerundeter Ecke machen:

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

    <stroke android:width="3dp"
            android:color="#555555"
            />

    <padding android:left="1dp"
             android:top="1dp"
             android:right="1dp"
             android:bottom="1dp"
             /> 

    <corners android:bottomRightRadius="0dp" android:bottomLeftRadius="2dp" 
     android:topLeftRadius="2dp" android:topRightRadius="0dp"/> 
</shape>

Aber die obige Form hat mir nicht das gegeben, was ich will. Es gibt mir ein Rechteck ohne abgerundete Ecken.

user256239
quelle

Antworten:

60

Es sieht aus wie ein Fehler http://code.google.com/p/android/issues/detail?id=939 .

Zum Schluss muss ich noch so etwas schreiben:

 <stroke android:width="3dp"
         android:color="#555555"
         />

 <padding android:left="1dp"
          android:top="1dp"
          android:right="1dp"
          android:bottom="1dp"
          /> 

 <corners android:radius="1dp"
  android:bottomRightRadius="2dp" android:bottomLeftRadius="0dp" 
  android:topLeftRadius="2dp" android:topRightRadius="0dp"/> 

Ich muss android angeben: bottomRightRadius = "2dp" für links unten unten abgerundete Ecke (ein weiterer Fehler hier).

user256239
quelle
1
Ja, ich kann Ihre letzte Aussage / Ihren letzten Fehler bestätigen, dass dort links / rechts gewechselt wird. Das habe ich auch in meiner App erlebt. (SDK 2.1). Haben Sie bereits einen Fehlerbericht auf b.android.com eingereicht oder wird er dort bereits gemeldet?
Mathias Conradt
3
Ich habe gerade einen Fehler gemeldet , code.google.com/p/android/issues/detail?id=9161 . Das Traurige ist, nachdem sie den Fehler
behoben
58

Während diese Frage bereits beantwortet wurde (es ist ein Fehler, der dazu führt, dass bottomLeftRadius und bottomRightRadius umgekehrt werden), wurde der Fehler in Android 3.1 behoben (API-Level 12 - auf dem Emulator getestet).

Um sicherzustellen, dass Ihre Drawables auf allen Plattformen korrekt aussehen, sollten Sie "korrigierte" Versionen der Drawables (dh wo die Radien unten links / rechts in der XML tatsächlich korrekt sind) in den Ordner res / drawable-v12 Ihrer App einfügen. Auf diese Weise verwenden alle Geräte, die eine Android-Version> = 12 verwenden, die richtigen Drawable-Dateien, während Geräte, die ältere Android-Versionen verwenden, die Drawables "Workaround" verwenden, die sich im Ordner res / drawables befinden.

Geoff
quelle
4
Eine andere Option besteht darin, eine Standarddatei zu values/dimens.xmlverwenden, die die invertierten Werte bottom_left und bottom_right enthält, sowie eine neue values-v12/dimens.xmlDatei mit den richtigen Werten. Auf diese Weise können Sie nur eine einzige Version der zeichnbaren XML-Datei behalten, und nur der Dimen-Wert wird basierend auf der API-Version ausgetauscht.
Joe
35

Aus der Dokumentation :

HINWEIS: Jede Ecke muss (anfangs) einen Eckenradius von mehr als 1 haben, da sonst keine Ecken abgerundet sind. Wenn Sie möchten, dass bestimmte Ecken nicht gerundet werden, verwenden Sie android: radius, um einen Standard-Eckenradius größer als 1 festzulegen. Überschreiben Sie dann jede Ecke mit den gewünschten Werten und geben Sie Null an ("0dp"). ) wo Sie keine abgerundeten Ecken wollen.

Zum Beispiel müssen Sie eine festlegen android:radius="<bigger than 1dp>", um tun zu können, was Sie wollen:

<corners 
    android:radius="2dp"
    android:bottomRightRadius="0dp" 
    android:topRightRadius="0dp"/> 
Entreco
quelle
14

Sie können auch extrem kleine Zahlen für Ihren Radius verwenden.

<corners 
  android:bottomRightRadius="0.1dp" android:bottomLeftRadius="2dp" 
 android:topLeftRadius="2dp" android:topRightRadius="0.1dp" />
Moncader
quelle
Das war das erste Mal, dass ich es versuchte ... aber keine Hoffnung ... ich teste auf Android 2.2 ... Irgendwelche anderen Ideen ... Danke
Aamir Shah
12

Für andere gibt es eine Lösung für jede API-Ebene. Sie können ein Element übereinander platzieren. Beispiel:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<!-- my firt item with 4 corners radius(8dp)
 -->
    <item>
        <shape>
            <solid
                android:angle="270.0"
                android:color="#3D689A" />

            <corners android:topLeftRadius="8dp" />
        </shape>
    </item>
<!-- my second item is on top right for a fake corner radius(0dp)
 -->
    <item
        android:bottom="30dp"
        android:left="50dp">
        <shape>
            <solid android:color="#5C83AF" />
        </shape>
    </item>
<!-- my third item is on bottom left for a fake corner radius(0dp)
 -->
    <item
        android:right="50dp"
        android:top="30dp">
        <shape>
            <solid android:color="#5C83AF" />
        </shape>
    </item>

</layer-list>

Das Ergebnis mit heller Farbe zeigt Ihnen die drei Elemente:

Geben Sie hier die Bildbeschreibung ein

das Endergebnis:

Geben Sie hier die Bildbeschreibung ein

Freundliche Grüße.

Williams
quelle
8

Dieser Fehler wird hier abgelegt . Dies ist ein Fehler von Android-Geräten mit einer API-Stufe von weniger als 12. Sie müssen die richtigen Versionen Ihrer Layouts in den Ordner drawable-v12 legen, der für API-Stufe 12 oder höher verwendet wird. Und eine fehlerhafte Version (Ecken umgeschaltet / umgekehrt) desselben Layouts wird in den Standard-Zeichenordner gestellt, der von Geräten mit einer API-Stufe von weniger als 12 verwendet wird.

Zum Beispiel: Ich musste einen Knopf mit einer abgerundeten Ecke unten rechts entwerfen.

Im 'zeichnbaren' Ordner - button.xml: Ich musste die linke untere Ecke abgerundet machen.

<shape>
    <corners android:bottomLeftRadius="15dp"/>
</shape>

Im Ordner 'drawable-v12' - button.xml: Hier wurde die richtige Version des Layouts platziert, um für API Level 12 oder höher verwendet zu werden.

<shape>
    <corners android:bottomLeftRadius="15dp"/>
</shape>
Reaz Murshed
quelle
7

Versuche dies

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/upkia"/>
<corners android:radius="10dp"
    android:topRightRadius="0dp"
    android:bottomRightRadius="0dp" />
</shape>
Sai Gopi ich
quelle