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"
    />
Pedantic
quelle
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

Aminographie
quelle
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
Ich habe es herausgefunden, siehe developer.android.com/guide/topics/ui/look-and-feel/…
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" />
Karina Sen.
quelle
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" />
vitperov
quelle
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.

Rock Lee
quelle
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();
        }
    });
Raseem Ayatt
quelle
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

Himura
quelle