如何在android中的xml文件中使用自定义视图

时间:2012-07-21 11:37:48

标签: android xml

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

       <?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);



    }



}

3 个答案:

答案 0 :(得分: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"/>

答案 1 :(得分:0)

  • 您遇到问题的原因是您只使用了代码版本的CTOR:

    public View (Context context)

    引用Android开发者指南:

      

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

  • 解决方案是添加自定义视图对布局充气过程所需的所有可能的CTOR,或者至少添加以下内容:

    public View (Context context, AttributeSet attrs)

    引用Android开发者指南:

      

    从XML扩展视图时调用的构造方法。这是   在从XML文件构造视图时调用,提供   XML文件中指定的属性。这个版本使用了   默认样式为0,因此应用的唯一属性值是   Context的主题和给定的AttributeSet。

答案 2 :(得分:0)

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

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

创建自定义视图时,您至少需要覆盖此视图:

public MyView(Context context, AttributeSet attrs) {
   super(context, attrs);
}