Java 将我创建的类的实例添加到xml文件
我有一个DrawingView类,该类为创建一个工程视图。您可以在下面看到该类的代码。但当我想在xml文件中创建该类的实例时,就会出现问题。我做错了什么 xml的代码:Java 将我创建的类的实例添加到xml文件,java,android,xml,Java,Android,Xml,我有一个DrawingView类,该类为创建一个工程视图。您可以在下面看到该类的代码。但当我想在xml文件中创建该类的实例时,就会出现问题。我做错了什么 xml的代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" androi
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFCCCCCC"
android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="center"
android:orientation="horizontal" >
<ImageButton
android:id="@+id/new_btn"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:contentDescription="@string/start_new"
android:src="@drawable/new_pic" />
<ImageButton
android:id="@+id/draw_btn"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:contentDescription="@string/brush"
android:src="@drawable/brush" />
<ImageButton
android:id="@+id/erase_btn"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:contentDescription="@string/erase"
android:src="@drawable/eraser" />
<ImageButton
android:id="@+id/save_btn"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:contentDescription="@string/save"
android:src="@drawable/save" />
</LinearLayout>
<com.example.drawingapp.DrawingView
android:id="@+id/drawing"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_marginBottom="3dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="3dp"
android:layout_weight="1"
android:background="#FFFFFFFF" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical" >
<!-- Top Row -->
<LinearLayout
android:id="@+id/paint_colors"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageButton
android:layout_width="@dimen/large_brush"
android:layout_height="@dimen/large_brush"
android:layout_margin="2dp"
android:background="#FF660000"
android:contentDescription="@string/paint"
android:onClick="paintClicked"
android:src="@drawable/paint"
android:tag="#FF660000" />
<ImageButton
android:layout_width="@dimen/large_brush"
android:layout_height="@dimen/large_brush"
android:layout_margin="2dp"
android:background="#FFFF0000"
android:contentDescription="@string/paint"
android:onClick="paintClicked"
android:src="@drawable/paint"
android:tag="#FFFF0000" />
<ImageButton
android:layout_width="@dimen/large_brush"
android:layout_height="@dimen/large_brush"
android:layout_margin="2dp"
android:background="#FFFF6600"
android:contentDescription="@string/paint"
android:onClick="paintClicked"
android:src="@drawable/paint"
android:tag="#FFFF6600" />
<ImageButton
android:layout_width="@dimen/large_brush"
android:layout_height="@dimen/large_brush"
android:layout_margin="2dp"
android:background="#FFFFCC00"
android:contentDescription="@string/paint"
android:onClick="paintClicked"
android:src="@drawable/paint"
android:tag="#FFFFCC00" />
<ImageButton
android:layout_width="@dimen/large_brush"
android:layout_height="@dimen/large_brush"
android:layout_margin="2dp"
android:background="#FF009900"
android:contentDescription="@string/paint"
android:onClick="paintClicked"
android:src="@drawable/paint"
android:tag="#FF009900" />
<ImageButton
android:layout_width="@dimen/large_brush"
android:layout_height="@dimen/large_brush"
android:layout_margin="2dp"
android:background="#FF009999"
android:contentDescription="@string/paint"
android:onClick="paintClicked"
android:src="@drawable/paint"
android:tag="#FF009999" />
</LinearLayout>
<!-- Bottom Row -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageButton
android:layout_width="@dimen/large_brush"
android:layout_height="@dimen/large_brush"
android:layout_margin="2dp"
android:background="#FF0000FF"
android:contentDescription="@string/paint"
android:onClick="paintClicked"
android:src="@drawable/paint"
android:tag="#FF0000FF" />
<ImageButton
android:layout_width="@dimen/large_brush"
android:layout_height="@dimen/large_brush"
android:layout_margin="2dp"
android:background="#FF990099"
android:contentDescription="@string/paint"
android:onClick="paintClicked"
android:src="@drawable/paint"
android:tag="#FF990099" />
<ImageButton
android:layout_width="@dimen/large_brush"
android:layout_height="@dimen/large_brush"
android:layout_margin="2dp"
android:background="#FFFF6666"
android:contentDescription="@string/paint"
android:onClick="paintClicked"
android:src="@drawable/paint"
android:tag="#FFFF6666" />
<ImageButton
android:layout_width="@dimen/large_brush"
android:layout_height="@dimen/large_brush"
android:layout_margin="2dp"
android:background="#FFFFFFFF"
android:contentDescription="@string/paint"
android:onClick="paintClicked"
android:src="@drawable/paint"
android:tag="#FFFFFFFF" />
<ImageButton
android:layout_width="@dimen/large_brush"
android:layout_height="@dimen/large_brush"
android:layout_margin="2dp"
android:background="#FF787878"
android:contentDescription="@string/paint"
android:onClick="paintClicked"
android:src="@drawable/paint"
android:tag="#FF787878" />
<ImageButton
android:layout_width="@dimen/large_brush"
android:layout_height="@dimen/large_brush"
android:layout_margin="2dp"
android:background="#FF000000"
android:contentDescription="@string/paint"
android:onClick="paintClicked"
android:src="@drawable/paint"
android:tag="#FF000000" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
Logcat向我显示错误:
10-16 11:57:56.171: E/AndroidRuntime(17594): FATAL EXCEPTION: main
10-16 11:57:56.171: E/AndroidRuntime(17594): Process: com.example.drawingapp, PID: 17594
10-16 11:57:56.171: E/AndroidRuntime(17594): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.drawingapp/com.example.drawingapp.MainActivity}: android.view.InflateException: Binary XML file line #44: Error inflating class com.example.drawingapp.DrawingView.java
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.app.ActivityThread.access$800(ActivityThread.java:135)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.os.Handler.dispatchMessage(Handler.java:102)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.os.Looper.loop(Looper.java:136)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.app.ActivityThread.main(ActivityThread.java:5001)
10-16 11:57:56.171: E/AndroidRuntime(17594): at java.lang.reflect.Method.invokeNative(Native Method)
10-16 11:57:56.171: E/AndroidRuntime(17594): at java.lang.reflect.Method.invoke(Method.java:515)
10-16 11:57:56.171: E/AndroidRuntime(17594): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
10-16 11:57:56.171: E/AndroidRuntime(17594): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
10-16 11:57:56.171: E/AndroidRuntime(17594): at dalvik.system.NativeStart.main(Native Method)
10-16 11:57:56.171: E/AndroidRuntime(17594): Caused by: android.view.InflateException: Binary XML file line #44: Error inflating class com.example.drawingapp.DrawingView.java
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
10-16 11:57:56.171: E/AndroidRuntime(17594): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.app.Activity.setContentView(Activity.java:1929)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:217)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.support.v7.app.ActionBarActivityDelegateICS.setContentView(ActionBarActivityDelegateICS.java:110)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:77)
10-16 11:57:56.171: E/AndroidRuntime(17594): at com.example.drawingapp.MainActivity.onCreate(MainActivity.java:28)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.app.Activity.performCreate(Activity.java:5231)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
10-16 11:57:56.171: E/AndroidRuntime(17594): ... 11 more
10-16 11:57:56.171: E/AndroidRuntime(17594): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.drawingapp.DrawingView.java" on path: DexPathList[[zip file "/data/app/com.example.drawingapp-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.drawingapp-1, /vendor/lib, /system/lib]]
10-16 11:57:56.171: E/AndroidRuntime(17594): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
10-16 11:57:56.171: E/AndroidRuntime(17594): at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
10-16 11:57:56.171: E/AndroidRuntime(17594): at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.view.LayoutInflater.createView(LayoutInflater.java:559)
10-16 11:57:56.171: E/AndroidRuntime(17594): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
10-16 11:57:56.171: E/AndroidRuntime(17594): ... 24 more
您可能还可以在LogCat中看到NullPointerException findViewByIdR.id.paint_颜色将返回null,因为没有具有该id的子视图。事实上,视图类不能有任何子视图 我怀疑您的意思是将布局扩展到视图中,在这种情况下,您应该扩展ViewGroup而不是view,并在supercontext、attrs下面包含以下行:
为什么调用构造函数:
drawView = (DrawingView) findViewById(R.id.drawing);
LinearLayout paintLayout = (LinearLayout) findViewById(R.id.paint_colors);
您已经在DrawingView中,因此找不到具有图形id的DrawingView。这与paintLayout相同,您的DrawingView没有使用id paint\u颜色的线性布局。您的DrawingView只是一个视图,而不是一个视图组
我想这行有一个NullPointerException:
currPaint = (ImageButton) paintLayout.getChildAt(0);
在此行测试之前,请检查paintLayout是否为空。第44行的XML内容是什么?好的,文本错误膨胀类com.example.drawingapp.DrawingView表示构造函数或设置器中存在错误。您可以在所有这些文件上放置一个断点,并查看其工作方式问题出现在currPaint=ImageButton paintLayout.getChildAt0;请查看我的更新,我看不到NullPointerException。它实际上根本找不到类。我不太确定如何修复您现有的问题,但我保证,一旦您修复了ClassNotFoundException,您将看到NullPointerException。我应该使用什么来代替Imageview?使用View。这是值得一试的,因为它似乎对他们有用。但我肯定看到了它的工作方式,你目前也有,我只是不知道为什么你的失败。我可以在这里问类似的问题,或者我应该创建新的问题吗?是的,我可以看到,在执行currPaint=ImageButton paintlayout.getChildAt0;行,这很正常,你不能这么做。DrawingView无法看到绘制颜色线性布局,因为该线性布局未包含在DrawingView中。LinearLayout和DrawingView在视图层次结构中处于同一级别。@DenleyBihari oops yes抱歉!:s
drawView = (DrawingView) findViewById(R.id.drawing);
LinearLayout paintLayout = (LinearLayout) findViewById(R.id.paint_colors);
currPaint = (ImageButton) paintLayout.getChildAt(0);