2012-05-24 12 views
11

Nelle mie applicazioni, mi baso spesso su visualizzazioni di build personalizzate, come nell'esempio seguente.Visualizzazioni Android personalizzate in 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" 

/> 

Il problema è che io non so come se esso sarà visualizzato correttamente fino a quando lo faccio funzionare su un dispositivo reale o sull'emulatore. Inoltre, se ho trovato qualcosa di sbagliato, dovrei apportare modifiche e distribuire nuovamente l'app per vedere se le modifiche funzionassero come previsto.

Questo può essere un processo lungo e noioso, soprattutto se l'applicazione richiede alcune interazioni per raggiungere l'attività che si desidera controllare.

L'utilizzo dell'editor di visualizzazione non funziona poiché non è possibile caricare la visualizzazione personalizzata.

C'è un altro modo per verificare come vengono visualizzate le viste senza eseguire l'intera applicazione?

+0

Grazie @Blundell di revisione mia domanda – fedepaol

risposta

54

È possibile farlo nella tua visualizzazione personalizzata:

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()

Questo permette di nascondere il codice dal ADT Plugin XML Viewer e, auspicabilmente, si visualizza un layout!

View.isInEditMode()

Indica se questa View è attualmente in modalità di modifica. Una vista è di solito in modalità di modifica se visualizzata all'interno di uno strumento per sviluppatori. Per l'istanza , se questa vista viene disegnata da un costruttore di interfaccia utente visuale , questo metodo deve restituire true. Le sottoclassi dovrebbero verificare il valore di ritorno di questo metodo per fornire comportamenti diversi se il loro comportamento normale potrebbe interferire con l'ambiente host. Per istanza : la classe genera un thread nel suo costruttore, il codice di disegno si basa su funzionalità specifiche del dispositivo, ecc. Questo metodo è in genere selezionato nel codice di disegno dei widget personalizzati.

0

È possibile creare un'attività di scheletro che carica solo la vista che si desidera vedere e riempirla con dati sufficienti per visualizzarla.

0

Uso Android Studio, quindi non sono sicuro che la risposta verrà applicata al caso.

Penso che si potrebbe ignorare OnDraw metodo nella visualizzazione personalizzata, come questo exemple mantenendo le proporzioni di un'immagine 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); 
    } 
} 

Questo metodo funziona sia nell'emulatore e il designer.

Funziona così per qualsiasi evento che ridisegna la vista (onSizeChanged, onLayout, ecc ...)

Problemi correlati