2011-10-07 27 views
139

¿Cómo agrego un borde a un botón? ¿Es posible hacer esto sin recurrir al uso de imágenes?Android - borde para el botón

+0

http: //desbordamiento de pila.com/questions/7626554/android-draw-border-in-imageview/7626628 # 7626628 Igual que aquí :) – asenovm

Respuesta

305

Paso 1: Crear un archivo llamado: my_button_bg.xml

Paso 2: Coloque este archivo en res/drawables.xml

Paso 3: inserte debajo del código

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

Paso 4: Utilice el código de "android: Fondo =" @ estirable/my_button_bg", donde por ejemplo se necesita a continuación:

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

gracias. + 1 para esto. Después de guardarlo en una carpeta dibujable como un archivo xml. ¿Cómo podemos usar eso ? –

+1

@AndroidPower puede usarlo con R.drawable.FILE_NAME – slayton

+2

¿A dónde va este código, en el código .axml para el marcado del botón? ¿Va en un archivo de tipo styles.xml? – theJerm

5

Sé que es alrededor de un año de retraso, sino que también puedes crear una imagen 9 ruta Hay una herramienta que viene con el SDK de Android que ayuda en la creación de dicha imagen Vea este enlace: http://developer.android.com/tools/help/draw9patch.html

PD: la imagen se puede escalar infinitamente así

13

crear estirable/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> 

y señalarlo como @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" /> 
14

Crear button_border.xml archivo en la carpeta estirable.

res/dibujable/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> 

y añadir botón a su disposición la actividad XML y poner el fondo 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" /> 
5

Si su botón no requiere un fondo transparente, puede crear una ilusión de un borde con un diseño de cuadro. Simplemente ajuste el atributo "relleno" de FrameLayout para cambiar el grosor del borde.

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

No estoy seguro de si los archivos xml de forma tienen colores de borde editables dinámicamente. Pero sí sé que con esta solución, puede cambiar dinámicamente el color del borde configurando el fondo FrameLayout.

1

En su diseño 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" /> 

En la carpeta estirable, cree un archivo de estilo de borde del botón:

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

Y en su actividad:

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(); 
     } 
    }); 
Cuestiones relacionadas