Comment ajouter une bordure à un bouton? Est-il possible de le faire sans recourir à des images?
É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"
/>
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" />
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" />
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"
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" />
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.
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
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();
}
});