web-dev-qa-db-fra.com

Android - bordure du bouton

Comment ajouter une bordure à un bouton? Est-il possible de le faire sans recourir à des images?

193
jeffreyveon

Étape 1: Créez le fichier nommé: my_button_bg.xml

Étape 2: Placez ce fichier dans res/drawables.xml

Étape 3: Insérer le code ci-dessous

<?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>

Étape 4: Utilisez le code "Android: background =" @ drawable/my_button_bg ", le cas échéant, par exemple ci-dessous:

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

Créez le fichier button_border.xml dans votre dossier pouvant être dessiné.

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>

Ajoutez un bouton à votre présentation d'activité XML et définissez le paramètre d'arrière-plan 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" />
34
Karina Sen

Android Official Solution

Depuis que Android Design Support v28 a été introduit, il est facile de créer un bouton avec une bordure à l'aide de MaterialButton . Cette classe fournit les styles de matériau mis à jour pour le bouton dans le constructeur. En utilisant app:strokeColor et app:strokeWidth, vous pouvez créer une bordure personnalisée comme suit:

build.gradle

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

style.xml

Assurez-vous que votre thème d'application hérite de Theme.MaterialComponents au lieu de Theme.AppCompat.

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

• Bouton avec bordure:

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

• Bouton à bordure non remplie:

<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="@color/transparent"
    app:cornerRadius="8dp"
    app:rippleColor="#33AAAAAA"
    app:strokeColor="@color/green"
    app:strokeWidth="2dp" />

Résultat visuel

enter image description here

29
aminography

Veuillez regarder ici pour créer une forme dessinable http://developer.Android.com/guide/topics/resources/drawable-resource.html#Shape

Ceci fait, dans le XML pour votre jeu de boutons Android:background="@drawable/your_button_border"

17
dymmeh

créez 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>

et le signaler comme @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" />
13
vitperov

Si votre bouton ne nécessite pas d'arrière-plan transparent, vous pouvez créer l'illusion d'une bordure à l'aide d'une disposition du cadre. Il suffit d’ajuster l’attribut "padding" de FrameLayout pour modifier l’épaisseur de la bordure.

<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>

Je ne sais pas si les fichiers XML de forme ont des couleurs de bordure modifiables de manière dynamique. Mais je sais qu'avec cette solution, vous pouvez modifier dynamiquement la couleur de la bordure en définissant l'arrière-plan FrameLayout.

5
Rock Lee

Je sais que c'est environ un an de retard, mais vous pouvez également créer une image à 9 chemins. Il existe un outil fourni avec Android SDK qui aide à la création d'une telle image Voir ce lien: http: // développeur .Android.com/tools/help/draw9patch.html

PS: l'image peut aussi être infiniment mise à l'échelle

5
himura

Dans votre mise en page XML:

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

Dans le dossier pouvant être dessiné, créez un fichier pour le style de bordure du bouton:

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

Et dans votre activité:

    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
Raseem Ayatt