这是我正在使用自定义视图的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);
}
}
答案 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:
引用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);
}