Cómo crear una actividad sin 'setContentView (R.layout.main)'

Sé que es posible crear actividades haciendo algo como el código abajo, donde la vista no se establece desde el archivo xml, sino así: setContentView (new myView (this));

Lo que no entiendo es cómo usar este código, pero todavía tienen la posibilidad de personalizarlo, por ejemplo, si quería añadir un botón al código de abajo, ¿cómo lo hago, porque no puedo simplemente añadir uno a un xml Diseño puede yo?

¡ALGUNAS BUENAS RESPUESTAS A ESTO MUCHAS AGRADECIDAS gracias de antemano!

package com.faceapp; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PointF; import android.media.FaceDetector; import android.media.FaceDetector.Face; import android.os.Bundle; import android.view.View; public class FaceappActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main); setContentView(new myView(this)); } private class myView extends View{ private int imageWidth, imageHeight; private int numberOfFace = 5; private FaceDetector myFaceDetect; private FaceDetector.Face[] myFace; float myEyesDistance; int numberOfFaceDetected; Bitmap myBitmap; public myView(Context context) { super(context); // TODO Auto-generated constructor stub BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options(); BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565; myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.face5, BitmapFactoryOptionsbfo); imageWidth = myBitmap.getWidth(); imageHeight = myBitmap.getHeight(); myFace = new FaceDetector.Face[numberOfFace]; myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace); numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub canvas.drawBitmap(myBitmap, 0, 0, null); Paint myPaint = new Paint(); myPaint.setColor(Color.GREEN); myPaint.setStyle(Paint.Style.STROKE); myPaint.setStrokeWidth(3); for(int i=0; i < numberOfFaceDetected; i++) { Face face = myFace[i]; PointF myMidPoint = new PointF(); face.getMidPoint(myMidPoint); myEyesDistance = face.eyesDistance(); canvas.drawRect( (int)(myMidPoint.x - myEyesDistance), (int)(myMidPoint.y - myEyesDistance), (int)(myMidPoint.x + myEyesDistance), (int)(myMidPoint.y + myEyesDistance), myPaint); } } } } 

^^^^^^^^^^^^^^^ Respondido

¿Cómo posicionar el botón y la vista de la imagen? (Idealmente usando el diseño relativo) La imagen de abajo muestra lo que quiero decir: (Ignora que la imagen se vuelve a clasificar según el tamaño)

Introduzca aquí la descripción de la imagen NUEVO CÓDIGO:

 package com.test; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PointF; import android.media.FaceDetector; import android.media.FaceDetector.Face; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; public class TesttActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); Button button = new Button(this); button.setText("Button!"); layout.addView(button); myView custom = new myView(this); layout.addView(custom); setContentView(layout); } private class myView extends View{ private int imageWidth, imageHeight; private int numberOfFace = 5; private FaceDetector myFaceDetect; private FaceDetector.Face[] myFace; float myEyesDistance; int numberOfFaceDetected; Bitmap myBitmap; public myView(Context context) { super(context); // TODO Auto-generated constructor stub BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options(); BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565; myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.face5, BitmapFactoryOptionsbfo); imageWidth = myBitmap.getWidth(); imageHeight = myBitmap.getHeight(); myFace = new FaceDetector.Face[numberOfFace]; myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace); numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub canvas.drawBitmap(myBitmap, 0, 0, null); Paint myPaint = new Paint(); myPaint.setColor(Color.GREEN); myPaint.setStyle(Paint.Style.STROKE); myPaint.setStrokeWidth(3); for(int i=0; i < numberOfFaceDetected; i++) { Face face = myFace[i]; PointF myMidPoint = new PointF(); face.getMidPoint(myMidPoint); myEyesDistance = face.eyesDistance(); canvas.drawRect( (int)(myMidPoint.x - myEyesDistance), (int)(myMidPoint.y - myEyesDistance), (int)(myMidPoint.x + myEyesDistance), (int)(myMidPoint.y + myEyesDistance), myPaint); } } } } 

Puede pasar setContentView () cualquier forma de vista, para ser la vista raíz de su diseño. A continuación se muestra un LinearLayout dinámicamente construido con un botón y su myView .

 public class Example extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); // Define the LinearLayout's characteristics layout.setGravity(Gravity.CENTER); layout.setOrientation(LinearLayout.VERTICAL); // Set generic layout parameters LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); Button button = new Button(this); button.setText("Button!"); layout.addView(button, params); // Modify this myView custom = new myView(this); layout.addView(custom, params); // Of course, this too setContentView(layout); } } 

Entienda que sólo puede agregar vistas secundarias a su vista raíz si pasa setContentView () a ViewGroup; Como RelativeLayout, LinearLayout, etc. En otras palabras, no se puede hacer esto:

  myView custom = new myView(this); Button button = new Button(this); button.setText("Button!"); custom.addView(button); // Nope! Method "addView()" does not exist for a regular View... setContentView(custom); 

Además, la convención de nomenclatura sugiere que cada palabra en un nombre de clase debe tener la primera letra en mayúscula. Así que myView debe ser MyView , como mínimo, hace que su código sea más fácil de leer para otros programadores y el compilador resaltará sus variables de clase con el color correcto.

  • Android: ¿Qué precaución debo tener al usar la propiedad setTag () de View?
  • ¿Cómo emitir un mensaje de confirmación (sí / no) de una tarea de Android?
  • el ancho de conjunto a la vista de texto no funciona
  • ¿Cómo alinear vistas en el centro de otra línea de base de vistas?
  • Lista de botones en Android
  • Android - ¿Cómo puedo acceder a un objeto View instanciado en onCreate en onResume?
  • La rotación de vista de Android no ocurre después de algunas llamadas de setAnimation
  • Android: cómo tener una imagen de fondo centrada en una vista
  • Botones para rellenar el ancho cuando se utiliza TableLayout
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.