2012-05-24 17 views
11

En mis aplicaciones, a menudo confío en vistas de compilación personalizadas, como en el siguiente ejemplo.Vistas personalizadas de Android en Eclipse Visual Editor

<?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 se como si se mostrará correctamente hasta que lo ejecuto 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.

Esto 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?

+0

Gracias @Blundell para revisar mi pregunta – fedepaol

Respuesta

54

Puede hacer esto en su 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 de ADT Plugin Visor XML y es de esperar que visualiza un diseño!

View.isInEditMode()

Indica si esta opinión está actualmente en modo de edición. Una vista es generalmente en modo de edición cuando se muestra dentro de una herramienta de desarrollador. Para la instancia , si esta vista está siendo dibujada por un constructor de interfaz de usuario visual , este método debe devolver verdadero. Las subclases deben verificar el valor de retorno de este método para proporcionar comportamientos diferentes si su comportamiento normal puede interferir con el entorno host. Para la instancia : la clase genera un hilo en su constructor, el código del dibujo se basa en funciones específicas del dispositivo, etc. Este método suele ser marcado en el código de dibujo de los widgets personalizados.

0

Puede crear una actividad básica que cargue solo la vista que desea ver y completarla con suficientes datos para que se muestre.

0

Estoy usando Android Studio, así que no estoy seguro de que esta respuesta se aplique a su caso.

Creo que se podría anular onDraw método en la vista personalizada, como este exemple mantener 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 y el diseñador.

Se ejecuta, así como para cualquier evento que vuelve a dibujar la vista (onSizeChanged, OnLayout, etc ...)

Cuestiones relacionadas