Java 将我创建的类的实例添加到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

我有一个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"
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);