it-swarm.com.de

Android - Nur mit abgerundeten Ecken oben zu zeichnen

Ich hatte diese Zeichenmöglichkeit, um ein abgerundetes Rechteck als Hintergrund zu haben:

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <solid Android:color="@color/white" />
    <stroke Android:width="1dp" Android:color="@color/light_gray" />
    <padding Android:left="10dp" Android:top="10dp" Android:right="10dp" Android:bottom="10dp" />
    <corners Android:radius="6dp" />
</shape>

Dies funktioniert wie erwartet einwandfrei.

Jetzt möchte ich das so ändern, dass es nur die oberen Ecken abrundet, also ändere ich es so:

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <solid Android:color="@color/white" />
    <stroke Android:width="1dp" Android:color="@color/light_gray" />
    <padding Android:left="10dp" Android:top="10dp" Android:right="10dp" Android:bottom="10dp" />
    <corners Android:topLeftRadius="6dp" Android:topRightRadius="6dp"
             Android:bottomLeftRadius="0dp" Android:bottomRightRadius="0dp"/>
</shape>

Aber jetzt ist keine der Ecken abgerundet und ich bekomme ein einfaches Rechteck. Was vermisse ich hier?

133
Aleks G

Versuchen Sie, diese Werte anzugeben:

 <corners Android:topLeftRadius="6dp" Android:topRightRadius="6dp"
         Android:bottomLeftRadius="0.1dp" Android:bottomRightRadius="0.1dp"/>

Beachten Sie, dass ich 0dp In 0.1dp Geändert habe.

BEARBEITEN: Siehe Aleks G Kommentar unten für eine sauberere Version

263
aqs

Versuche so etwas zu machen:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:bottom="-20dp" Android:left="-20dp">
        <shape Android:shape="rectangle">
            <solid Android:color="@color/white" />

            <corners Android:radius="20dp" />
        </shape>
    </item>
</layer-list>

Es scheint nicht geeignet zu sein, einen anderen Eckenradius des Rechtecks ​​einzustellen. Also kannst du diesen Hack benutzen.

14
busylee

In meinem Fall unter Code

    <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:top="10dp" Android:bottom="-10dp"
        >

        <shape Android:shape="rectangle">
            <solid Android:color="@color/maincolor" />

            <corners
                Android:topLeftRadius="10dp"
                Android:topRightRadius="10dp"
                Android:bottomLeftRadius="0dp"
                Android:bottomRightRadius="0dp"
            />
        </shape>

    </item>
    </layer-list>
8
Shekhar

Aufbauend auf Antwort von busylee können Sie auf diese Weise ein drawable erstellen, das nur eine un abgerundete Ecke hat (in diesem Beispiel oben links) :

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item>
        <shape Android:shape="rectangle">
            <solid Android:color="@color/white" />
            <!-- A numeric value is specified in "radius" for demonstrative purposes only,
                  it should be @dimen/val_name -->
            <corners Android:radius="10dp" />
        </shape>
    </item>
    <!-- To keep the TOP-LEFT corner UNROUNDED set both OPPOSITE offsets (bottom+right): -->
    <item
        Android:bottom="10dp"
        Android:right="10dp">
        <shape Android:shape="rectangle">
            <solid Android:color="@color/white" />
        </shape>
    </item>
</layer-list>

Bitte beachten Sie, dass das obige drawable not in der Android Studio-Vorschau (2.0.0p7) korrekt angezeigt wird eine andere Ansicht und verwenden Sie diese als Android:background="@drawable/...".

8
Dev-iL

Ich habe Ihren Code ausprobiert und einen Knopf mit abgerundeten Ecken bekommen. Ich gab die Farben als @ffffff und Schlag gab ich #C0C0C0.

versuchen

  1. Geben Android: bottomLeftRadius = "0.1dp" anstelle von 0. wenn es nicht funktioniert
  2. Prüfen Sie, welche Zeichen und welche Auflösung der Emulator hat. Ich habe einen zeichnbaren Ordner unter res erstellt und benutze ihn. (hdpi, mdpi ldpi) Der Ordner, in dem Sie diese XML haben. Das ist meine Ausgabe.

enter image description here

2
Arul T

Möglicherweise müssen Sie dies lesen https://developer.Android.com/guide/topics/resources/drawable-resource.html#Shape

und unten gibt es eine Notiz.

Hinweis Jede Ecke muss (anfangs) einen Eckenradius größer als 1 haben, sonst werden keine Ecken gerundet. Wenn Sie möchten, dass bestimmte Ecken nicht abgerundet werden, verwenden Sie zur Umgehung Android: radius, um einen Standardeckenradius von mehr als 1 festzulegen. Überschreiben Sie dann jede einzelne Ecke mit den tatsächlich gewünschten Werten und geben Sie Null ("0dp") an. ) wo Sie keine abgerundeten Ecken wollen.

1
lightman1988

Erstelle roung_top_corners.xml auf drawable und kopiere den folgenden Code

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" >
<corners
    Android:topLeftRadius="22dp"
    Android:topRightRadius="22dp"
    Android:bottomLeftRadius="0dp"
    Android:bottomRightRadius="0dp"
    />
<gradient
    Android:angle="180"
    Android:startColor="#1d2b32"
    Android:centerColor="#465059"
    Android:endColor="#687079"
    Android:type="linear" />
<padding
    Android:left="0dp"
    Android:top="0dp"
    Android:right="0dp"
    Android:bottom="0dp"
    />
<size
    Android:width="270dp"
    Android:height="60dp"
    /></shape>
1
Manoj Reddy