637 Stimmen

Wie kann man ein Layout mit abgerundeten Ecken erstellen?

Wie kann ich ein Layout mit abgerundeten Ecken erstellen? Ich möchte abgerundete Ecken auf meine LinearLayout .

1275voto

Gaurav Arora Punkte 16754

1: Definieren layout_bg.xml in Auslosungen:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <stroke android:width="3dp" android:color="#B1BCBE" />
    <corners android:radius="10dp"/>
    <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>

2: Hinzufügen layout_bg.xml als Hintergrund für Ihr Layout

android:background="@drawable/layout_bg"

189voto

hungryghost Punkte 9003

Für API 21+, Clip-Ansichten verwenden

Abgerundeter Umrissbeschnitt wurde der View Klasse in API 21. Siehe dies Schulungsdoku oder dies Referenz für weitere Informationen.

Dank dieser eingebauten Funktion lassen sich abgerundete Ecken sehr einfach umsetzen. Sie funktioniert in jeder Ansicht und in jedem Layout und unterstützt den richtigen Ausschnitt.

Hier ist zu tun:

  • Erstellen Sie ein Drawable mit einer runden Form und legen Sie es als Hintergrund für Ihre Ansicht fest: android:background="@drawable/round_outline"
  • Clip zur Gliederung im Code: setClipToOutline(true)

In der Dokumentation hieß es früher, dass man die android:clipToOutline="true" die XML, sondern dieser Fehler ist nun endlich gelöst, und in der Dokumentation steht nun korrekt, dass man dies nur im Code tun kann.

Wie es aussieht:

examples with and without clipToOutline

Besonderer Hinweis zu ImageViews

setClipToOutline() funktioniert nur, wenn der Hintergrund der Ansicht auf eine zeichenbare Form eingestellt ist. Wenn diese Hintergrundform vorhanden ist, behandelt die Ansicht die Umrisse des Hintergrunds als die Grenzen für Clipping- und Schattenzwecke.

Das bedeutet, dass Sie, wenn Sie die Ecken einer ImageView abrunden wollen, mit setClipToOutline() Ihr Bild muss von android:src anstelle von android:background (da der Hintergrund für die abgerundete Form verwendet wird). Wenn Sie Hintergrund verwenden MÜSSEN, um Ihr Bild anstelle von src zu setzen, können Sie diese verschachtelte Ansichten Workaround verwenden:

  • Erstellen Sie ein äußeres Layout, dessen Hintergrund auf die Zeichenfläche Ihrer Form eingestellt ist
  • Wickeln Sie dieses Layout um Ihre ImageView (ohne Padding)
  • Die ImageView (einschließlich aller anderen Elemente im Layout) wird nun auf die runde Form des äußeren Layouts zugeschnitten.

98voto

kyogs Punkte 6578

Hier ist eine Kopie einer XML-Datei zum Erstellen einer Zeichenfläche mit weißem Hintergrund, schwarzem Rand und abgerundeten Ecken:

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

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

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

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

Speichern Sie es als Xml-Datei im Verzeichnis "drawable", Verwenden Sie sie wie jeden anderen zeichenbaren Hintergrund (Symbol oder Ressourcendatei) unter Verwendung ihres Ressourcennamens (R.drawable.your_xml_name)

53voto

Evan JIANG Punkte 680

Verwenden Sie CardView in der Android v7 Support-Bibliothek. Obwohl es ein bisschen schwer ist, löst es alle Probleme, und einfach genug. Nicht wie die Methode set drawable Hintergrund, könnte es Clip Unteransichten erfolgreich.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardBackgroundColor="@android:color/transparent"
    card_view:cardCornerRadius="5dp"
    card_view:cardElevation="0dp"
    card_view:contentPadding="0dp">
    <YOUR_LINEARLAYOUT_HERE>
</android.support.v7.widget.CardView>

31voto

Hiren Patel Punkte 50526

Ich habe das so gemacht:

Screenshot prüfen:

Relative layout Background

erstellen. auslosbar Datei, die mit custom_rectangle.xml en auslosbar Ordner:

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

    <solid android:color="@android:color/white" />

    <corners android:radius="10dip" />

    <stroke
        android:width="1dp"
        android:color="@android:color/white" />

</shape>

Jetzt bewerben Rechteckiger Hintergrund auf Siehe :

mView.setBackground(R.drawlable.custom_rectangle);

Erledigt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X