问题描述
- Android自定义view失败
-
安卓编程时想在xml布局中自定义一个view,但当把自定义的view写在xml里面时,就会报错说The following classes could not be instantiated:- com.example.wifidetection.MyPaint.MyView 。
其中MyView就是我自定义的view,前面是它的路径,里面wifideection是包名,MyPaint是MyView所在的类,代码如下:<?xml version="1.0" encoding="utf-8"?>
xmlns:tools="http://schemas.android.com/tools"
xmlns:custom="http://schemas.android.com/apk/res/com.example.wifidetection"
android:id="@+id/mScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" >android:orientation = "vertical"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" ><Button android:id="@+id/start" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="开始绘图" /> <com.example.wifidetection.MyPaint.MyView android:layout_width="200dp" android:layout_height="100dp" />
MyPaint中是这样的
public class MyPaint extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ····· setContentView(R.layout.paint_layout);//显示MyView布局 } class MyView extends View { public MyView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyView(Context context){ super(context);
一直搞不懂,网上也没找到什么好的解释,求论坛里大神解答
解决方案
MyView 是内部类,把myview独立一个.java文件,定义成public类
解决方案二:
要使用MyView作为布局的话,你可以直接将MyView单独作为一个类,然后再xml中引用;在xml中引用应该只能到 .MyPaint,然后再java文件中操作MyView,好像没有像你这么写的吧!
解决方案三:
MyPaint.MyView这个自定义的view不能只有一个带Context的构造函数,需要至少带两个参数的构造函数
public .MyView(Context context, AttributeSet attrs)
解决方案四:
public myView(Context context,AttributeSet attrs){
super(context, attrs);
}
这样一个构造函数,貌似你的是错的,你看一下,试着改一下!
解决方案五:
public myView(Context context,AttributeSet attrs){
super(context, attrs);
}
这样一个构造函数,貌似你的是错的,你看一下,试着改一下!