2012-11-28 7 views
5

Sto provando a creare un widget composto da alcuni controlli raggruppati insieme. Ecco il widget:Visualizzazione composita che non riesce a eseguire il rendering in Eclipse in modalità di modifica

public class VarioView extends RelativeLayout { 

private int value; 
private ImageView m_circle; 
private TextView m_varioText; 
private TextView m_units; 
public VarioView(Context context) 
{ 
    this(context,null); 
} 
public VarioView(Context context, AttributeSet attr) 
{ 
    this(context,attr, 0); 
} 
public VarioView(Context context, AttributeSet attr, int defStyle) 
{ 
    super(context, attr, defStyle); 
    //View.inflate(context, R.layout.vario, this); 
    LayoutInflater li = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    li.inflate(R.layout.vario, this, true); 

    m_circle = (ImageView)this.findViewById(R.id.VarioCircle); 
    m_varioText = (TextView)this.findViewById(R.id.VarioText); 

    //m_circle.setColorFilter(Color.BLUE); 
} 
public int getValue() { 
    return value; 
} 
public void setValue(int value) { 
    m_varioText.setText(Integer.valueOf(value).toString()); 
    this.value = value; 
} 
} 

Ecco il widget di xml

<merge xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/VarioCircle" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerInParent="true" 
     android:contentDescription="Vario Circle" 
     android:src="@drawable/circle3" /> 

    <TextView 
     android:id="@+id/VarioText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="200" 
     android:textColor="#FF0000" 
     android:textSize="60sp" 
     android:textStyle="bold" 
     android:typeface="monospace" /> 

    <TextView 
     android:id="@+id/VarioUnits" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/VarioText" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="100dp" 
     android:text="fpm" 
     android:textSize="20sp" /> 
</RelativeLayout> 

</merge> 

Ecco forma del cerchio:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval" 
    android:useLevel="false" 
    android:color="#FF0000" > 

    <size 
    android:height="200dip" 
    android:width="200dip" /> 

    <stroke 
    android:width="10dp" 
    android:color="#FF0000" /> 

</shape> 

E a mio avviso principale che sto solo usando in questo modo:

<com.proflite.VarioView 

     android:layout_width="match_parent" 
    android:layout_height="match_parent" 
/> 

Il mio problema è che funziona bene quando l'eseguo in emulatore (o dispositivo reale), ma quando provo ad andare a editor grafico in Eclipse disegna una casella grigia per il controllo e mi dà questo:

The following classes could not be instantiated: 
- com.proflite.VarioView (Open Class, Show Error Log) 
See the Error Log (Window > Show View) for more details. 
Tip: Use View.isInEditMode() in your custom views to skip code when shown in Eclipse 

android.content.res.Resources$NotFoundException: Could not resolve resource value: 0x7F030001. 
    at android.content.res.BridgeResources.throwException(BridgeResources.java:693) 
    at android.content.res.BridgeResources.getLayout(BridgeResources.java:271) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:394) 
    at com.proflite.VarioView.<init>(VarioView.java:30) 
    at com.proflite.VarioView.<init>(VarioView.java:23) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0( at sun.reflect.NativeConstructorAccessorImpl.newInstance( at sun.reflect.DelegatingConstructorAccessorImpl.newInstance( at java.lang.reflect.Constructor.newInstance( at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(ProjectCallback.java:413) 
    at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(ProjectCallback.java:170) 
    at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207) 
    at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:135) 
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:746) 
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:718) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:372) 

informazioni extra, controllo 0x7F030001 è mappato a R.layout.vario e l'errore sta venendo fuori da questa riga: li.inflate(R.layout.vario, this, true);. Inoltre se lo cambio a li.inflate(R.layout.vario, this); non dà l'errore, ma il controllo mostra solo "vuoto", non renderizzato in editmode (funziona ancora quando effettivamente eseguito).

Mi piacerebbe davvero poter visualizzare il layout nell'editor perché ci vuole molto tempo per apportare piccole modifiche al layout e rieseguire l'emulatore.

Grazie

** ** Nota l'errore proviene dal layout in cui è collocato il controllo. Effettua il rendering correttamente se eseguo la modifica grafica sul controllo stesso.

+0

Non riesco a ottenere l'errore nel layout grafico con il codice. Anche se dovevo cambiare '@ drawable/circle3' in qualcos'altro, quindi forse c'è il problema. – brillenheini

+0

Hai provato il layout reale che utilizza VarioView o hai semplicemente controllato vario.xml nell'editor grafico. Funziona perfettamente per me se visualizzo l'editor grafico del layout di controllo composito effettivo, ma non riesco se cerco di utilizzarlo posizionandolo su un altro layout. Se in realtà funziona per te come inserito puoi caricare un file di progetto da qualche parte in modo da poter controllare. – macsux

risposta

6

Beh, mi sento abbastanza stupido. Tutto ha funzionato dopo il riavvio di Eclipse.

+0

Stessa situazione e stessa soluzione. Vita 1 ora e trova risposta. –

Problemi correlati