2012-04-20 9 views
8

Estoy tratando de extender la clase de botón de Android y hacer que use un archivo de diseño xml.Cómo extender un botón de Android y usar un archivo de diseño xml

La razón por la que quiero usar un archivo de diseño xml es que mi botón necesita usar un estilo y, que yo sepa, no hay una forma de establecer el estilo por programación.

BuyButton clase pública se extiende botón {...}

<?xml version="1.0" encoding="utf-8"?> 
<Button 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    style="@style/customButton" 
/> 

de modo que pueda llamar:

new BuyButton(activity); 

y haga que sea crear un botón que tiene el estilo aplicado a eso.

(También estoy abierto a otras formas de obtener el mismo resultado)

Respuesta

15

crear una clase que se extiende Button.

public class BuyButton extends Button { 

    public BuyButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
    } 

} 

En su referencia XML esa clase personalizada directamente.

<?xml version="1.0" encoding="utf-8"?> 
<your.package.name.BuyButton 
xmlns:android="http://schemas.android.com/apk/res/android" 
style="@style/customButton"/> 
+2

que estoy recibiendo un error de ejecución. se está quejando del xml. 04-20 16: 30: 19.852: E/AndroidRuntime (18583): android.view.InflateException: archivo binario XML línea # 2: error al inflar la clase client.views.buttons.BuyButtonView – ajma

+0

¡Gracias! ¡Gracias! ¡Gracias! ¡Respuesta perfecta! – gran33

-1

Consulte la sección Button Style. Simplemente establece un fondo personalizado dibujable.

+1

NO PUEDO hacer un dibujo de fondo personalizado. Debe ser un estilo. – ajma

1

En su diseño .xml, un cambio de una línea al tipo de control (cambiar de Botón a su tipo de botón personalizado) resolverá su problema de fundición.

Para su BuyButton subclassed, encuentre la sección del botón en .xml; puede ser algo como esto:

<Button 
      android:id="@+id/btnBuy" 
      android:layout_width="188dp" 
      android:layout_height="70dp" 
      android:padding="12dp" 
      android:text="Buy" /> 

y el cambio a esto:

<yourpackage.name.BuyButton 
      android:id="@+id/btnBuy" 
      android:layout_width="188dp" 
      android:layout_height="70dp" 
      android:padding="12dp" 
      android:text="Buy" /> 
+0

también - debe tener un constructor en su subclase que permita la inflación; también puede crear otros constructores que tengan diferentes firmas, pero el constructor básico que toma los parámetros de contexto y atributos debe definirse en su subclase. ver: https://sholtz9421.wordpress.com/2012/03/22/correct-way-to-subclass-android-views/ –

Cuestiones relacionadas