Android - Rand für Schaltfläche


Antworten:


431

Schritt 1: Erstellen Sie eine Datei mit dem Namen: my_button_bg.xml

Schritt 2: Platzieren Sie diese Datei in res / drawables.xml

Schritt 3: Fügen Sie den folgenden Code ein

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
  <gradient android:startColor="#FFFFFF" 
    android:endColor="#00FF00"
    android:angle="270" />
  <corners android:radius="3dp" />
  <stroke android:width="5px" android:color="#000000" />
</shape>

Schritt 4: Verwenden Sie den Code "android: background =" @ drawable / my_button_bg ", wo dies erforderlich ist, z. B. unten:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Your Text"
    android:background="@drawable/my_button_bg"
    />

1
danke. + 1 dafür. Nach dem Speichern in einem zeichnbaren Ordner als XML-Datei. Wie können wir es verwenden?
Android Killer

1
@AndroidPower können Sie es mit R.drawable.FILE_NAME
Slayton

2
Wohin geht dieser Code im XML-Code für das Markup für die Schaltfläche? Geht es in eine Datei vom Typ styles.xml?
theJerm

Ich habe nur den Strich verwendet (und ihn weiß gemacht), um einen Knopf mit Weiß zu skizzieren. Funktioniert gut mit 4.4, aber in 4.0.3 wird der Knopf schwarz - irgendwelche Ideen warum?
Kibi

1
@ Kibi Entschuldigung, jemand hat meine Antwort bearbeitet und dir falsche Ratschläge gegeben. Ich habe es geändert, aber ich bin schockiert, dass jemand eine akzeptierte Antwort bearbeiten und die Nützlichkeit ändern kann.
Pedantic

57

• • Android Official Solution

Seit Einführung von Android Design Support v28 ist es einfach, eine umrandete Schaltfläche mit zu erstellen MaterialButton. Diese Klasse liefert aktualisierte Materialstile für die Schaltfläche im Konstruktor. Mit app:strokeColorund können app:strokeWidthSie einen benutzerdefinierten Rahmen wie folgt erstellen:


1. Wenn Sie verwenden androidx:

build.gradle

dependencies {
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.0.0'
}

• Umrandete Schaltfläche:

<com.google.android.material.button.MaterialButton
    style="@style/Widget.AppCompat.Button.Colored"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="MATERIAL BUTTON"
    android:textSize="15sp"
    app:strokeColor="@color/green"
    app:strokeWidth="2dp" />

• Nicht ausgefüllte umrandete Schaltfläche:

<com.google.android.material.button.MaterialButton
    style="@style/Widget.AppCompat.Button.Borderless"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="UNFILLED MATERIAL BUTTON"
    android:textColor="@color/green"
    android:textSize="15sp"
    app:backgroundTint="@android:color/transparent"
    app:cornerRadius="8dp"
    app:rippleColor="#33AAAAAA"
    app:strokeColor="@color/green"
    app:strokeWidth="2dp" />



2. Wenn Sie verwenden appcompat:

build.gradle

dependencies {
    implementation 'com.android.support:design:28.0.0'
}

style.xml

Stellen Sie sicher, dass Ihr Anwendungsthema von Theme.MaterialComponentsstatt erbt Theme.AppCompat.

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    <!-- Customize your theme here. -->
</style>

• Umrandete Schaltfläche:

<android.support.design.button.MaterialButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="MATERIAL BUTTON"
    android:textSize="15sp"
    app:strokeColor="@color/green"
    app:strokeWidth="2dp" />

• Nicht ausgefüllte umrandete Schaltfläche:

<android.support.design.button.MaterialButton
    style="@style/Widget.AppCompat.Button.Borderless"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="UNFILLED MATERIAL BUTTON"
    android:textColor="@color/green"
    android:textSize="15sp"
    app:backgroundTint="@android:color/transparent"
    app:cornerRadius="8dp"
    app:rippleColor="#33AAAAAA"
    app:strokeColor="@color/green"
    app:strokeWidth="2dp" />



Visuelles Ergebnis

Geben Sie hier die Bildbeschreibung ein


Ich sehe, Sie haben textColor und textSize in Ihrem Button-XML deklariert. Was schlagen Sie vor, wenn jemand bereits einen Stil für textColor und textSize definiert hat und nun den hinzufügen möchte style="@style/Widget.AppCompat.Button.Borderless"?
Jemand irgendwo


Wie Sie bereits erwähnt haben, ist es möglich, einen Stil zu definieren, der vom randlosen Stil erbt, und dann bevorzugte Attribute entsprechend dem Basisstil hinzuzufügen.
Aminographie

Etwas OT, aber was ist das interessante 4. Symbol in der Aktionsleiste am unteren Rand des GIF? (Es sieht auch so aus, als ob das GIF von einem echten Gerät gepackt wurde, cool)
i336_

1
Vielleicht irre ich mich, aber für mich in der Schaltfläche • Ungefüllter Rand musste ich ändern: app: backgroundTint = "@ color / transparent" in app: backgroundTint = "@ android: color / transparent"
xarly

37

Erstellen Sie eine button_border.xmlDatei in Ihrem Zeichenordner.

res / drawable / button_border.xml

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

    <solid android:color="#FFDA8200" />

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

</shape>

Fügen Sie Ihrem XML-Aktivitätslayout eine Schaltfläche hinzu und legen Sie den Hintergrund fest android:background="@drawable/button_border".

        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/button_border"
                android:text="Button Border" />

19

Erstelle drawable / button_green.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
  <gradient
    android:startColor="#003000"
    android:centerColor="#006000"
    android:endColor="#003000"
    android:angle="270" />
  <corners android:radius="5dp" />
  <stroke android:width="2px" android:color="#007000" />
</shape>

und weisen Sie darauf hin als @drawable/button_green:

<Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="@drawable/button_green"
        android:text="Button" />


8

Wenn für Ihre Schaltfläche kein transparenter Hintergrund erforderlich ist, können Sie mithilfe eines Rahmenlayouts eine Illusion eines Rahmens erstellen. Passen Sie einfach das Attribut "Auffüllen" des FrameLayout an, um die Dicke des Rahmens zu ändern.

<FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="1sp"
        android:background="#000000">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Your text goes here"
            android:background="@color/white"
            android:textColor="@color/black"
            android:padding="10sp"
            />
</FrameLayout>

Ich bin nicht sicher, ob die XML-Formdateien dynamisch bearbeitbare Rahmenfarben haben. Ich weiß jedoch, dass Sie mit dieser Lösung die Farbe des Rahmens dynamisch ändern können, indem Sie den FrameLayout-Hintergrund festlegen.


6

In Ihrem XML-Layout:

<Button
    android:id="@+id/cancelskill"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="25dp"
    android:layout_weight="1"
    android:background="@drawable/button_border"
    android:padding="10dp"
    android:text="Cancel"
    android:textAllCaps="false"
    android:textColor="#ffffff"
    android:textSize="20dp" />

Erstellen Sie im Zeichenordner eine Datei für den Rahmenstil der Schaltfläche:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <stroke
        android:width="1dp"
        android:color="#f43f10" />
</shape>

Und in Ihrer Aktivität:

    GradientDrawable gd1 = new GradientDrawable();
    gd1.setColor(0xFFF43F10); // Changes this drawbale to use a single color instead of a gradient
    gd1.setCornerRadius(5);
    gd1.setStroke(1, 0xFFF43F10);

    cancelskill.setBackgroundDrawable(gd1);

    cancelskill.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            cancelskill.setBackgroundColor(Color.parseColor("#ffffff"));
            cancelskill.setTextColor(Color.parseColor("#f43f10"));

            GradientDrawable gd = new GradientDrawable();

            gd.setColor(0xFFFFFFFF); // Changes this drawbale to use a single color instead of a gradient
            gd.setCornerRadius(5);
            gd.setStroke(1, 0xFFF43F10);
            cancelskill.setBackgroundDrawable(gd);

            finish();
        }
    });

5

Ich weiß, dass es ungefähr ein Jahr zu spät ist, aber Sie können auch ein Bild mit 9 Pfaden erstellen. Es gibt ein Tool, das mit dem Android SDK geliefert wird und beim Erstellen eines solchen Bildes hilft. Siehe diesen Link: http://developer.android.com/tools/help/draw9patch .html

PS: Das Bild kann auch unendlich skaliert werden

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.