programacion - manual de android en pdf
Vistas personalizadas de Android en Eclipse Visual Editor (3)
Podría crear una actividad básica que cargue solo la vista que desea ver y completarla con suficientes datos para que se muestre.
En mis aplicaciones, a menudo confío en vistas de compilación personalizadas, como en el siguiente ejemplo.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="@color/light_grey"
android:layout_height="match_parent"
android:layout_width="fill_parent" >
<TextView
style="@style/CardTitle"
android:id="@+id/card_title"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
/>
<com.whiterabbit.cards.ui.AspectRatioImageView
android:id="@+id/card_picture"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:layout_marginLeft="30dip"
android:layout_marginRight="30dip"
android:src="@drawable/boss"
/>
<ListView
android:id="@+id/card_properties"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
El problema es que no sé cómo se mostrará correctamente hasta que lo ejecute en un dispositivo real o en el emulador. Además, si encontraba algo mal, tendría que realizar cambios en él y volver a implementar la aplicación para ver si los cambios funcionaban como esperaba.
Este puede ser un proceso largo y aburrido, especialmente si la aplicación requiere alguna interacción para llegar a la actividad que desea verificar.
El uso del editor visual no funciona ya que no puede cargar la vista personalizada.
¿Hay alguna otra forma de comprobar cómo se muestran las vistas sin ejecutar en toda la aplicación?
Puedes hacer esto en tu Vista personalizada:
if(!isInEditMode()){
// Your custom code that is not letting the Visual Editor draw properly
// i.e. thread spawning or other things in the constructor
}
http://developer.android.com/reference/android/view/View.html#isInEditMode ()
Esto le permite ocultar el código del Visor XML de ADT Plugin y ¡espero que le muestre un diseño!
View.isInEditMode ()
Indica si esta vista se encuentra actualmente en modo de edición. Una Vista generalmente está en modo de edición cuando se muestra dentro de una herramienta de desarrollador. Por ejemplo, si esta vista está siendo dibujada por un constructor de interfaz de usuario visual, este método debería devolver verdadero. Las subclases deben verificar el valor de retorno de este método para proporcionar diferentes comportamientos si su comportamiento normal puede interferir con el entorno del host. Por ejemplo: la clase genera un hilo en su constructor, el código de dibujo se basa en características específicas del dispositivo, etc. Este método generalmente se verifica en el código de dibujo de los widgets personalizados.
Estoy usando Android Studio, así que no estoy seguro de que esta respuesta se aplique a tu caso.
Creo que se puede anular el método OnDraw en la vista personalizada, como este ejemplo, manteniendo la relación de aspecto de una imagen interna:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// TODO: consider storing these as member variables to reduce
// allocations per draw cycle.
int paddingLeft = getPaddingLeft();
int paddingTop = getPaddingTop();
int paddingRight = getPaddingRight();
int paddingBottom = getPaddingBottom();
int w = getWidth() - paddingLeft - paddingRight;
int h = getHeight() - paddingTop - paddingBottom;
w = w<h ? w : h;
h = w;
// Draw the example drawable on top of the text.
if (dieDrawable != null) {
dieDrawable.setBounds(paddingLeft, paddingTop,
paddingLeft + w, paddingTop + h);
dieDrawable.draw(canvas);
}
}
Este método se ejecuta tanto en el emulador como en el diseñador.
Se ejecuta también para cualquier evento que vuelva a dibujar la vista (onSizeChanged, onLayout, etc ...)