¿Cómo utilizar mi SurfaceView con main.xml en Android?

En la clase principal de mi proyecto, he

public class MyClass extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); mySurfaceView = new MySurfaceView(this); setContentView(mySurfaceView); ... } class MySurfaceView extends SurfaceView implements Runnable{ ... } } 

Quiero agregar botones y ruedas a este programa, que tengo en un mini-programa separado ahora con un archivo main.xml. Sé que para acceder a eso, tengo que tener la línea setContentView (R.layout.main) , pero luego, pierdo el acceso a mi SurfaceView. ¿Cómo lo hago para tener ambos? Vi algo en línea sobre la adición de algunas líneas con un FrameLayout pero no puedo averiguar dónde, y he intentado pegarlo en varios lugares en mi main.xml, pero sólo hace que todo mi programa para romper ..

Actualmente mi main.xml se ve así:

 <?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" > <Button android:id="@+id/selectButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="Select Time Interval" android:onClick="selfDestruct" /> <Button android:id="@+id/finishButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="Done" android:visibility="gone" android:onClick="selfDestruct" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="top|left" android:paddingLeft="12dp" android:paddingRight="12dp" > <kankan.wheel.widget.WheelView android:id="@+id/startHour" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="43dp"/> <kankan.wheel.widget.WheelView android:id="@+id/startMins" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <kankan.wheel.widget.WheelView android:id="@+id/startAmpm" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="fill_parent" > <TextView android:id="@+id/theWordTo" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="fill_parent" android:gravity="center" android:text=" to "/> </LinearLayout> <kankan.wheel.widget.WheelView android:id="@+id/endHour" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="43dp" /> <kankan.wheel.widget.WheelView android:id="@+id/endMins" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <kankan.wheel.widget.WheelView android:id="@+id/endAmpm" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="wrap_content"/> </LinearLayout> </LinearLayout> 

Creo que quieres usar FrameLayout . Cambie su main.xml para que se vea así:

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <kankan.current.app.MyClass.MySurfaceView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/surfaceView" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/selectButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="Select Time Interval" android:onClick="selfDestruct" /> <Button android:id="@+id/finishButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="Done" android:visibility="gone" android:onClick="selfDestruct" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="top|left" android:paddingLeft="12dp" android:paddingRight="12dp" > <kankan.wheel.widget.WheelView android:id="@+id/startHour" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="43dp"/> <kankan.wheel.widget.WheelView android:id="@+id/startMins" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <kankan.wheel.widget.WheelView android:id="@+id/startAmpm" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="fill_parent" > <TextView android:id="@+id/theWordTo" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="fill_parent" android:gravity="center" android:text=" to "/> </LinearLayout> <kankan.wheel.widget.WheelView android:id="@+id/endHour" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="43dp" /> <kankan.wheel.widget.WheelView android:id="@+id/endMins" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <kankan.wheel.widget.WheelView android:id="@+id/endAmpm" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="wrap_content"/> </LinearLayout> </LinearLayout> </FrameLayout> 

Luego en la actividad:

 public class MyClass extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); mySurfaceView = (MySurfaceView) findViewById(R.id.surfaceView); } class MySurfaceView extends SurfaceView implements Runnable{ ... } } 

Sin duda es posible añadir su SurfaceView al diseño en tiempo de ejecución (en el método onCreate() por ejemplo), pero probablemente sería mucho más fácil añadirlo en el diseño XML.

Por simplicidad, primero definir MySurfaceView en su propio archivo, en lugar de en el mismo archivo que su actividad MyClass. Asegúrese de incluir un constructor de la forma MySurfaceView(Context context, AttributeSet attrs) para que la vista se puede inflar correctamente. A continuación, simplemente inserte lo siguiente en su diseño XML donde quiera.

 <com.example.package.MySurfaceView android:layout_width="fill_parent" android:layout_height="fill_parent"/> 

Donde la primera línea es la ruta a MySurfaceView ( com.example.package es el nombre del paquete, y MySurfaceView es el archivo en el que ha definido la vista personalizada).

  • Entendiendo & lt & gt
  • Mostrar contenido en la barra de herramientas
  • Aplicación de Android que no se conecta a Wifi, pero funciona bien en 3G compartida a través de Wifi
  • Cómo obtener el ancho en píxeles de vista con android: layout_width = "wrap_content"?
  • La etiqueta de meta-datos no tiene valor correcto
  • ¿Cómo puedo configurar el color del trazo de la barra de calificación de Android? (No el color de las estrellas pero la FRONTERA)
  • ¿Cómo alineo una barra de herramientas de Android en la parte inferior de la pantalla?
  • Traducir fácilmente xml en Android
  • XML de Android: se desplaza entre campos EditText
  • Forzar la siguiente palabra a una nueva línea si la palabra es demasiado larga para la vista de texto
  • Leer ApplicationManifest de Aplicación de Android (apk) usando .NET
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.