我正在尝试构建一个小部件,它由几个组合在一起的控件组成。小部件如下:

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"
 />

我的问题是,当我在Emulator(或Real Device)中运行它时,它工作得很好,但当我尝试在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);它不会给出错误,但控件只显示“blank”,不会在editmode中呈现(在实际运行时仍然有效)。
我真的希望能够在编辑器中可视化布局,因为做一些小的布局更改并在模拟器中重新运行它们需要很长时间。
谢谢
**注意**错误来自放置控件的布局。如果我对控件本身进行图形编辑,它实际上会成功呈现。

最佳答案

嗯,我觉得自己很蠢。我重启eclipse后一切都正常了。

08-04 08:19