我試圖構建一個由分組在一起的幾個控件組成的小部件。這裏的小部件:複合視圖無法在編輯模式下在Eclipse中渲染
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;
}
}
這裏的小部件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>
這裏的圓形:
<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>
而且在我的主要觀點我只是用這樣的:
<com.proflite.VarioView
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
我的問題是它的工作原理很好,當我在模擬器(或真實設備)運行它,但是當我嘗試去圖形編輯器在Eclipse中它繪製一個灰色的框控件上並給了我這樣的:
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)
額外的信息,我檢查0x7F030001
映射到R.layout.vario
並且錯誤來自此行:li.inflate(R.layout.vario, this, true);
。此外,如果我將它更改爲li.inflate(R.layout.vario, this);
它不會給出錯誤,但控件只顯示「空白」,不會在editmode中呈現(實際運行時仍然有效)。
我真的很希望能夠在編輯器中可視化佈局,因爲需要很長時間才能進行小的佈局更改並在仿真器中重新運行它們。
謝謝
**注意**錯誤來自放置控件的佈局。如果我在控件本身上進行圖形編輯,它實際上會呈現成功。
我不會在您的代碼中看到圖形佈局中的錯誤。雖然我不得不將'@ drawable/circle3'改成別的東西,所以也許會出現這個問題。 – brillenheini
您是否嘗試過使用VarioView的實際佈局,或者您是否在圖形編輯器中檢查了vario.xml?如果我查看實際的複合控件佈局圖形編輯器,它對我來說工作得很好,但如果我嘗試將它放在另一個佈局上使用它,則會失敗。如果它確實對你有用,那麼請你上傳一個項目文件,以便我可以檢查。 – macsux