Android – Uso de SurfaceView personalizado en XML de presentación

Tengo este diseño sencillo:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <SurfaceView android:id="@+id/surfaceView1" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight = "1" /> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button2" /> </LinearLayout> </LinearLayout> 

Esto cumple y la aplicación funciona perfectamente. Quería reemplazar el SurfaceView generico con mi propio SurfaceView personalizado:

 import android.content.Context; import android.view.SurfaceHolder; import android.view.SurfaceView; public class PuzzleView extends SurfaceView implements SurfaceHolder.Callback { public PuzzleView(Context context) { super(context); // TODO Auto-generated constructor stub } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub } } 

Y utilizarlo en el diseño xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <PuzzleView android:id="@+id/surfaceView1" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight = "1" /> . . . 

Tan pronto como se crea la actividad, recibo una excepción:

 public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.game); } 10-29 19:56:25.921: E/AndroidRuntime(287): java.lang.RuntimeException: Unable to start activity ComponentInfo{ybz.pack1/ybz.pack1.MyActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class PuzzleView 

¿No es esto permitido? No puedo encontrar ningún ejemplo para hacer esto.

Editar :
Otros, a continuación, la solución dada a continuación, su también necesario para agregar todos los constructores de SurfaceView a PuzzleView:

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

2 Solutions collect form web for “Android – Uso de SurfaceView personalizado en XML de presentación”

En tu diseño xml también tienes que escribir el paquete (donde declaras tu clase) así:

 <com.your.package.here.PuzzleView android:id="@+id/surfaceView1" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight = "1" /> 

Me gustaría componer la solución real a otra respuesta, ya que primero leí la sección " Editar " en la pregunta original.

Aquí dos cosas que usted necesita hacer:

  1. Primero (respuesta de @luksprog )

En tu diseño xml también tienes que escribir el paquete (donde declaras tu clase) así:

 <com.your.package.here.PuzzleView android:id="@+id/surfaceView1" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight = "1" /> 
  1. Segundo (Editar desde @Yoav )

Otros, a continuación, la solución dada a continuación, también es necesario agregar todos los constructores de SurfaceView a PuzzleView:

 public PuzzleView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public PuzzleView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } 
  • FrameLayout no coincide con altura de NestedScrollView
  • ¿Cómo puedo obtener botones de acción con diseños personalizados para que se llamen como botones de acción estándar en Android 3.0+
  • ViewPager setCurrentItem (pageId, true) no suaviza el desplazamiento
  • Disposición del paisaje de Android
  • Referencia para buenos patrones de diseño de la interfaz de usuario de Android
  • Cargar la barra de progreso en android?
  • Android: Scrollview amplía la imagen de fondo
  • Cómo limitar la altura de un ListView dentro de un GridLayout?
  • Cómo establecer el ancho de la ListView en un PopupWindow en Android?
  • Android: programación de diseños de XML
  • AdView adjunto al fondo no me permite ver el último elemento en Recyclerview
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.