2011-06-12 19 views
8

Quiero extender la funcionalidad de la clase ImageButton, en una nueva clase elijo llamar "DialButton". Para comenzar, simpre extiendo ImageButton y no agregué nada nuevo. En mi opinión, esto debería ser idéntico a la clase normal de ImageButton.¿Cómo extender ImageButton correctamente?

package com.com.com; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.ImageButton; 

public class DialButton extends ImageButton{ 

    public DialButton(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

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

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

} 

inserto un DialButton en XML (no te preocupes por el resto del archivo, su irrelevantes)

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:stretchColumns="1"> 
    <TableRow 
    android:layout_weight="1"> 
     <DialButton 
      android:id="@+id/button1" 
      android:background="@drawable/dialpad" 
      android:layout_weight="1"/> 

y el uso del XML en mi actividad:

package com.com.com; 

import android.app.Activity; 
import android.os.Bundle; 

public class Android3 extends Activity { 

    DialButton button1; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.maintable); 
    } 
} 

todo se compila y se instala en el emulador, pero cuando la aplicación se inicia, la fuerza se cierra sobre mí. Si cambio el componente XML de un DialButton a un ImageButton, todo funciona bien. ¿Por qué es esto? ¿Cuál es la diferencia entre la clase ImageButton y mi clase DialButton que hace que el componente DialButton bloquee la aplicación?

Respuesta

11

En el archivo de diseño, usted tiene que proporcionar un nombre de 'totalmente calificado' para sus widgets personalizados de la siguiente manera ...

<com.mycompany.myapp.DialButton 
    android:id="@+id/button1" 
    android:background="@drawable/dialpad" 
    android:layout_weight="1"/> 
+1

ver este enlace http://developer.android.com/guide/ topics/ui/custom-components.html # modificando para más detalles – Noel

+0

¡Salud! ¡Funcionó! Pasé por alto esa parte del tutorial. encontrado aquí: http://developer.android.com/guide/topics/ui/custom-components.html – fred

+0

@fred: Feliz de ayudar. – Squonk