2011-05-19 8 views
306

Quiero hacer las esquinas de una ronda button. ¿Hay alguna manera fácil de lograr esto en Android?¿Cómo hacer girar las esquinas de un botón?

+8

Sunil: Tipo, es una pregunta honesta. También busqué en Google mucho para llegar a una respuesta sensata, y no es sencillo. Esperaba que Android SDK proporcionara esta propiedad en el objeto Button en sí ... –

+2

mira esto: http://nishantvnair.wordpress.com/2010/11/09/customize-button-in-android/ – Lavanya

+0

Marca esto fuera http://www.gadgetsaint.com/tips/rounded-corners-views-layouts-android/#.WPz2QVN97BI – ASP

Respuesta

501

Si quieres algo como esto

Button preview

aquí está el código.

1.Create un archivo XML en la carpeta estirable como mybutton.xml y pegar el siguiente marcado:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
<item android:state_pressed="true" > 
    <shape android:shape="rectangle" > 
     <corners android:radius="3dip" /> 
     <stroke android:width="1dip" android:color="#5e7974" /> 
     <gradient android:angle="-90" android:startColor="#345953" android:endColor="#689a92" />    
    </shape> 
</item> 
<item android:state_focused="true"> 
    <shape android:shape="rectangle" > 
     <corners android:radius="3dip" /> 
     <stroke android:width="1dip" android:color="#5e7974" /> 
     <solid android:color="#58857e"/>  
    </shape> 
</item> 
<item > 
    <shape android:shape="rectangle" > 
     <corners android:radius="3dip" /> 
     <stroke android:width="1dip" android:color="#5e7974" /> 
     <gradient android:angle="-90" android:startColor="#8dbab3" android:endColor="#58857e" />    
    </shape> 
</item> 
</selector> 

2.Now utilizar este estirable para el fondo de su vista. Si la vista es botón y luego algo como esto:

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:textColor="#ffffff" 
    android:background="@drawable/mybutton" 
    android:text="Buttons" /> 
+0

se colgó: Causado por: org.xmlpull.v1.XmlPullParserException: la línea del archivo XML binario n. ° 24: etiqueta requiere un atributo 'dibujable' o una etiqueta secundaria que define un – Zennichimaro

+2

dibujable podemos hacer esto programáticamente. – Killer

+0

Dice que el selector de elementos debe declararse EDITAR: Perdón por el archivo que estaba dentro de la carpeta de valores en lugar del archivo dibujable. Cuando lo transferí, funcionó. –

4

si está utilizando vectores arrastrables, entonces simplemente necesita especificar un elemento < de esquinas > en su definición dibujable. He cubierto esto en un blog post.

Si está utilizando herramientas de mapa de bits/9 parches, tendrá que crear las esquinas con transparencia en la imagen de mapa de bits.

274

Crear un archivo XML en la carpeta estirable, como a continuación

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" android:padding="10dp"> 
    <!-- you can use any color you want I used here gray color--> 
    <solid android:color="#ABABAB"/> 
    <corners android:radius="10dp"/> 
</shape> 

Aplicar esto como fondo de botón que desee hacer esquinas redondeadas.

O puede usar el radio separada para cada esquina, como a continuación

android:bottomRightRadius="10dp" 
android:bottomLeftRadius="10dp" 
android:topLeftRadius="10dp" 
android:topRightRadius="10dp" 
+45

Puede acortar las esquinas a android: radius = "10dp", que se aplicará a todos –

+20

Esto es no es una solución completa, ya que no es compatible con los diversos estados del botón (presionado, enfocado, predeterminado). Para una mejor solución, consulte http://stackoverflow.com/questions/9334618/rounded-button-android – JosephL

+3

@BenSimpson, verá que hay una diferencia en la forma cuando coloca solo esa línea en lugar de definir cada una de las radios de esquina individualmente. –

19

crear shape.xml en la carpeta dibujable

como shape.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 
    <stroke android:width="2dp" 
    android:color="#FFFFFF"/> 
    <gradient 
    android:angle="225" 
    android:startColor="#DD2ECCFA" 
    android:endColor="#DD000000"/> 
<corners 
    android:bottomLeftRadius="7dp" 
    android:bottomRightRadius="7dp" 
    android:topLeftRadius="7dp" 
    android:topRightRadius="7dp" /> 
</shape> 

y en myactivity.xml

que pueda use

<Button 
    android:id="@+id/btn_Shap" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/Shape" 
    android:background="@drawable/shape"/> 
8

La forma simple que descubrí fue hacer un nuevo archivo xml en la carpeta dibujable y luego señalar los botones de fondo a ese archivo xml. Aquí está el código que utilicé:

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

<solid android:color="#ff8100"/> 
<corners android:radius="5dp"/> 

</shape> 
+0

Para restaurar el efecto de ondulación Material-tema en el fondo dibujable personalizado, agregue 'android: foreground ="? attr/seleccionableItemBackground "' en la Vista de botones. Consulte https://stackoverflow.com/questions/38327188/android-setting-background-color-of-button-loses-ripple-effect –

10

Crear archivo en la carpeta rounded_btn.xml Disponibles ...

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="@color/#FFFFFF"/>  

    <stroke android:width="1dp" 
     android:color="@color/#000000" 
     /> 

    <padding android:left="1dp" 
     android:top="1dp" 
     android:right="1dp" 
     android:bottom="1dp" 
     /> 

    <corners android:bottomRightRadius="5dip" android:bottomLeftRadius="5dip" 
     android:topLeftRadius="5dip" android:topRightRadius="5dip"/> 
    </shape> 

y utilizar this.xml archivo como un botón de fondo botón de estilo

<Button 
android:id="@+id/btn" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="@drawable/rounded_btn" 
android:text="Test" /> 
2

con el icono enter image description here

<Button 
     android:id="@+id/buttonVisaProgress" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_marginTop="5dp" 
     android:background="@drawable/shape" 
     android:onClick="visaProgress" 
     android:drawableTop="@drawable/ic_1468863158_double_loop" 
     android:padding="10dp" 
     android:text="Visa Progress" 
     android:textColor="@android:color/white" /> 

forma.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<corners android:radius="14dp" /> 
<gradient 
    android:angle="45" 
    android:centerColor="#1FA8D1" 
    android:centerX="35%" 
    android:endColor="#060d96" 
    android:startColor="#0e7e1d" 
    android:type="linear" /> 
<padding 
    android:bottom="0dp" 
    android:left="0dp" 
    android:right="0dp" 
    android:top="0dp" /> 
<size 
    android:width="270dp" 
    android:height="60dp" /> 
<stroke 
    android:width="3dp" 
    android:color="#000000" /> 

2

Crear archivo myButton.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="@color/colorButton"/> 
    <corners android:radius="10dp"/> 
</shape> 

botón Añadir a

<Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background">@drawable/myButton 
     /> 
4

Este enlace tiene toda la información que necesita. Here

Shape.xml

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

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

    <corners android:bottomLeftRadius="8dip" 
       android:topRightRadius="8dip" 
       android:topLeftRadius="1dip" 
       android:bottomRightRadius="1dip" 
       /> 
</shape> 

y main.xml

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 

    <TextView android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="Hello Android from NetBeans"/> 

    <Button android:id="@+id/button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Nishant Nair" 
      android:padding="5dip" 
      android:layout_gravity="center" 
      android:background="@drawable/button_shape" 
      /> 
</LinearLayout> 

Esto debería darle el resultado deseado.

Lo mejor de la suerte

9

Es tan simple. Crea un archivo XML como debajo de uno. Establecerlo como fondo para el botón. Cambie el atributo de radio a su deseo, si necesita más curva para el botón.

button_background.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="@color/primary" /> 
    <corners android:radius="5dp" /> 
</shape> 

Conjunto de fondo a su botón:

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/button_background"/> 
Cuestiones relacionadas