0

这是我在其中使用自定义视图的 xml。该视图位于另一个名为 com.soft.MyView 的包中,扩展视图的类也被命名为 MyView 现在 m 正在强制关闭,logcat 中的错误是 07-21 16:26:29.936: ERROR/AndroidRuntime(19854):引起:android.view.InflateException:二进制 XML 文件第 12 行:膨胀类 com.soft.MyView.MyView 时出错 ..请告诉我我错在哪里?

       <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/RelativeLayout1" xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView android:id="@+id/TextView1" android:layout_alignParentLeft="true" android:layout_alignParentTop="true"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
<com.soft.MyView.MyView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/TextView1" android:layout_centerHorizontal="true" android:layout_marginTop="187dp" android:id="@+id/drawingImageView"/>
</RelativeLayout>

这是我的班级 MyView

    public class MyView extends View{



class Pt{

    float x, y;



    Pt(float _x, float _y){

        x = _x;

        y = _y;

    }

}



Pt[] myPath = { new Pt(100, 100),

                new Pt(200, 200),

                new Pt(200, 500),

                new Pt(400, 500),

                new Pt(400, 200)

                };



    public MyView(Context context) {

        super(context);

        // TODO Auto-generated constructor stub

    }



    @Override

    protected void onDraw(Canvas canvas) {

        // TODO Auto-generated method stub

        super.onDraw(canvas);





        Paint paint = new Paint();

        paint.setColor(Color.WHITE);

        paint.setStrokeWidth(3);

        paint.setStyle(Paint.Style.STROKE);

        Path path = new Path();



        path.moveTo(myPath[0].x, myPath[0].y);

        for (int i = 1; i < myPath.length; i++){

            path.lineTo(myPath[i].x, myPath[i].y);

        }

        canvas.drawPath(path, paint);



    }



}
4

3 回答 3

0

句法 <yourcompletepackagename.YourCustomClassName ..../>

<com.soft.MyView 
          ^^^^^^
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_below="@+id/TextView1" 
android:layout_centerHorizontal="true" 
android:layout_marginTop="187dp" 
android:id="@+id/drawingImageView"/>
于 2012-07-21T11:42:48.023 回答
0
  • 您的问题的原因是您只使用了代码版本 CTOR:

    公共视图(上下文上下文)

    来自android开发者指南的引用:

    从代码创建视图时使用的简单构造函数。

  • 解决方案是添加自定义视图在布局膨胀过程中所需的所有可能的 CTOR,或者至少添加这个:

    公共视图(上下文上下文,AttributeSet attrs)

    来自android开发者指南的引用:

    从 XML 扩充视图时调用的构造函数。这在从 XML 文件构建视图时调用,提供在 XML 文件中指定的属性。此版本使用默认样式 0,因此应用的唯一属性值是上下文主题和给定 AttributeSet 中的属性值。

于 2012-07-21T12:21:00.753 回答
0

您需要在 MyView 中覆盖不同的构造函数。而不是只有这个构造函数:

public MyView(Context context) {
   super(context);
}

当你创建一个自定义视图时,你至少也需要覆盖这个:

public MyView(Context context, AttributeSet attrs) {
   super(context, attrs);
}
于 2012-07-21T12:24:46.853 回答