Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Tutorial de diseño de Android Runtime

¿Alguien sabe cómo realizar o tener una buena referencia para hacer un diseño de la actividad en tiempo de ejecución en android?

Aquí está el código para mi actividad. Estoy seguro de que sólo estoy descuidando hacer algo aquí:

package com.isi.sa; import android.app.Activity; import android.os.Bundle; import android.widget.LinearLayout; import android.widget.TextView; public class SimpleAssessmentTest extends Activity { LinearLayout layout; TextView question; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); layout = new LinearLayout(this); question = new TextView(this); layout.setLayoutParams(new ViewGroup.LayoutParams(-1,-1)); layout.setBackgroundColor(R.color.blue); question.setLayoutParams(new ViewGroup.LayoutParams(-1,-2)); question.setTextColor(R.color.green); question.setTextSize(1,14); question.setText("This is question1"); layout.addView(question); setContentView(layout); } } 

Como puedes ver, sólo estoy tratando de agregar un diseño lineal con una sola vista de texto (sólo para propósitos de prueba) sin embargo, cuando empieza la actividad recibo una pantalla en negro con una barra de título de mi nombre de aplicación.

Gracias

  • Lenguaje basado en JVM sin tiempo de ejecución de lenguaje
  • Android: error al abrir el archivo de rastreo: ningún archivo o directorio de este tipo
  • Solicitar y permitir permiso WRITE_EXTERNAL_STORAGE en tiempo de ejecución no tiene efectos en la sesión actual
  • Ayuda de depuración de hilo (AsyncTask) RuntimeException causa en Android / Eclipse
  • ¿Cómo puedo generar recursos XML en tiempo de ejecución en Android?
  • Runtime.exec (): ¿Reanudar en Android?
  • Adición / modificación de anotaciones en un proyecto java
  • Android determina la orientación de la pantalla en tiempo de ejecución
  • 4 Solutions collect form web for “Tutorial de diseño de Android Runtime”

    Olvidaste la configuración de tu contenido. Deberías agregar

     setContentView(layout); 

    Al final del método onCreate

    Puede consultar esta URL: http://www.linux-mag.com/cache/7705/1.html . Tiene tanto widgets de la biblioteca como widgets personalizados.

    EDITAR:

    SetBackgroundColor requiere la entrada en el formato ARGB adecuado: 0xAARRGGBB . Cada AA, RR, GG y BB van desde 00 (mínimo) hasta ff (máximo).

    El ejemplo mínimo aquí va aquí y funciona perfectamente. Aquí están la captura de pantalla y el código (modificado un poco):

    http://picturepush.com/public/3313522 (old)

     package us.simpleit; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; public class SimpleGUI extends Activity { TextView tv; EditText et; LinearLayout ll; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //LinearLayout ll = new LinearLayout(this); ll = new LinearLayout(this); ll.setOrientation(android.widget.LinearLayout.VERTICAL); ll.setLayoutParams(new ViewGroup.LayoutParams(-1,-1)); // ARGB: Opaque Red ll.setBackgroundColor(0x88ff0000); tv = new TextView(this); tv.setLayoutParams(new ViewGroup.LayoutParams(-1,-2)); tv.setText("sample text goes here"); // ARGB: Opaque Green tv.setBackgroundColor(0x5500ff00); ll.addView(tv); et = new EditText(this); et.setLayoutParams(new ViewGroup.LayoutParams(-1,-2)); et.setText("edit me please"); // ARGB: Solid Blue et.setBackgroundColor(0xff0000ff); ll.addView(et); Button btn = new Button(this); btn.setText("Go!"); btn.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { tv.setText(et.getText().toString()); } }); ll.addView(btn); setContentView(ll); //setContentView(R.layout.main); } } 

    A continuación se muestra cómo crear vistas y diseños de forma programática sin utilizar los archivos xml de diseño. También crea un objeto de diseño de rectángulo redondeado que dibuja un rectángulo redondeado alrededor de cualquier objeto secundario que se coloca en él.

     package android.example; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import android.widget.TextView; public class MessageScreen extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int mainBackgroundColor = Color.parseColor("#2E8B57"); int labelTextColor = Color.parseColor("#FF4500"); int messageBackgroundColor = Color.parseColor("#3300FF"); int messageTextColor = Color.parseColor("#FFFF00"); DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); float density = metrics.density; int minMarginSize = Math.round(density * 8); int paddingSize = minMarginSize * 2; int maxMarginSize = minMarginSize * 4; TextView label = new TextView(this); /* * The LayoutParams are instructions to the Layout that will contain the * View for laying out the View, so you need to use the LayoutParams of * the Layout that will contain the View. */ LinearLayout.LayoutParams labelLayoutParams = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); label.setLayoutParams(labelLayoutParams); label.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); label.setPadding(paddingSize, paddingSize, paddingSize, paddingSize); label.setText(R.string.title); label.setTextColor(labelTextColor); TextView message = new TextView(this); RoundedRectangle.LayoutParams messageLayoutParams = new RoundedRectangle.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); /* * This is one of the calls must made to force a ViewGroup to call its * draw method instead of just calling the draw method of its children. * This tells the RoundedRectangle to put some extra space around the * View. */ messageLayoutParams.setMargins(minMarginSize, paddingSize, minMarginSize, maxMarginSize); message.setLayoutParams(messageLayoutParams); message.setTextSize(TypedValue.COMPLEX_UNIT_SP, paddingSize); message.setText(R.string.message); message.setTextColor(messageTextColor); message.setBackgroundColor(messageBackgroundColor); RoundedRectangle messageContainer = new RoundedRectangle(this); LinearLayout.LayoutParams messageContainerLayoutParams = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); messageContainerLayoutParams.setMargins(paddingSize, 0, paddingSize, 0); messageContainer.setLayoutParams(messageContainerLayoutParams); messageContainer.setOrientation(LinearLayout.VERTICAL); /* * This is one of the calls must made to force a ViewGroup to call its * draw method instead of just calling the draw method of its children. * This tells the RoundedRectangle to color the the exta space that was * put around the View as well as the View. This is exterior color of * the RoundedRectangle. */ messageContainer.setBackgroundColor(mainBackgroundColor); /* * This is one of the calls must made to force a ViewGroup to call its * draw method instead of just calling the draw method of its children. * This is the interior color of the RoundedRectangle. It must be * different than the exterior color of the RoundedRectangle or the * RoundedRectangle will not call its draw method. */ messageContainer.setInteriorColor(messageBackgroundColor); // Add the message to the RoundedRectangle. messageContainer.addView(message); // LinearLayout main = new LinearLayout(this); LinearLayout.LayoutParams mainLayoutParams = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); main.setLayoutParams(mainLayoutParams); main.setOrientation(LinearLayout.VERTICAL); main.setBackgroundColor(mainBackgroundColor); main.addView(label); main.addView(messageContainer); setContentView(main); } } 

    La clase para el objeto de diseño RoundedRectangle es como se define aquí:

     /** * A LinearLayout that draws a rounded rectangle around the child View that was added to it. */ package android.example; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.RectF; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.widget.LinearLayout; /** * A LinearLayout that has rounded corners instead of square corners. * * @author Danny Remington * * @see LinearLayout * */ public class RoundedRectangle extends LinearLayout { private int mInteriorColor; public RoundedRectangle(Context p_context) { super(p_context); } public RoundedRectangle(Context p_context, AttributeSet attributeSet) { super(p_context, attributeSet); } // Listener for the onDraw event that occurs when the Layout is drawn. protected void onDraw(Canvas canvas) { Rect rect = new Rect(0, 0, getWidth(), getHeight()); RectF rectF = new RectF(rect); DisplayMetrics metrics = new DisplayMetrics(); Activity activity = (Activity) getContext(); activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); float density = metrics.density; int arcSize = Math.round(density * 10); Paint paint = new Paint(); paint.setColor(mInteriorColor); canvas.drawRoundRect(rectF, arcSize, arcSize, paint); } /** * Set the background color to use inside the RoundedRectangle. * * @param Primitive int - The color inside the rounded rectangle. */ public void setInteriorColor(int interiorColor) { mInteriorColor = interiorColor; } /** * Get the background color used inside the RoundedRectangle. * * @return Primitive int - The color inside the rounded rectangle. */ public int getInteriorColor() { return mInteriorColor; } } 

    No estoy seguro si esta pregunta ha sido contestada o no, pero acabo de superar este mismo problema hoy. Viet abordó el tema anterior, pero no señaló explícitamente para comprobar sus valores de color. Si vienes de un fondo J2ME como yo, podrías definir tus valores de color int como 0xRRGGBB, por lo que para J2ME rojo completo lo definiría como 0xFF0000. Sin embargo, hacerlo en Android resultará en un valor int de 0x00FF0000. Debido a que Android utiliza el formato de 0xAARRGGBB, un valor de 0xFF0000 (J2ME) es en realidad (0x00FF0000) en Android que es de color rojo completo que es COMPLETAMENTE TRANSPARENTE, por lo que no se ve en la pantalla.

    He notado arriba en su código que está utilizando question.setTextColor(R.color.green); Esta sentencia asignará el valor de id creado en el archivo R, por lo que es probablemente un número alto con algún valor como 0x7f050000 donde el Alpha se establece más bajo que FULL OPAQUE. Pruebe su ejemplo con:

     question.setTextColor( getResources().getColor( R.color.green ) ); 

    Esto debería establecer el color de texto como el valor en R.color.green no el ID de R.color.green.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.