SurfaceView和错误膨胀类

时间:2011-08-26 06:48:28

标签: android surfaceview

我正在尝试使用自定义视图创建应用,并且我不断收到“错误充气类”。 一定是我在自定义视图方面缺少一些基础知识,但我不确定是什么。这是一个非常简单的自定义视图程序,还需要什么来使它工作?

(注意:为了这个问题,我将SurfaceView类放在Activity类中。这不是大型应用程序中的情况。我没有在这里显示AndroidManifest.xml文件,但它只是在eclipse中由向导生成。)

这是java:

package com.mypackage;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceView;

public class SimpleCustomViewActivity extends Activity {

class TheView extends SurfaceView{

    private static final String TAG = "TheView";

    public TheView(Context context, AttributeSet attrs) {
        super(context, attrs);
        Log.i(TAG,"TheView(" + context + "," + attrs + ")");
    }

}

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.simple_layout);
        TheView v = (TheView) findViewById(R.id.myview);
    }
}

这是文件res / layout / simple_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <com.mypackage.SimpleCustomView.TheView
    android:id="@+id/myview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
        />
</LinearLayout>

4 个答案:

答案 0 :(得分:6)

当您从xml文件中调用自己的surfaceView类时,您需要添加以下公共surfaceView创建方法:

public GameView(Context context) {
    super(context);
    init(context);
}

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

public GameView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init(context);
}

如果你正在使用函数setContentView(gv),你只需要第一个。

答案 1 :(得分:1)

在xml中它应该是:

 <com.mypackage.SimpleCustomView.TheView     
    android:id="@+id/myview"     
    android:layout_width="fill_parent"     
    android:layout_height="fill_parent"> 
 </com.mypackage.SimpleCustomView.TheView>

答案 2 :(得分:0)

我相信这样的事情可能有用,虽然我没有测试过:

<View
   class="com.mypackage.SimpleCustomView$TheView"
   id="@+id/myview"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent" /> 

答案 3 :(得分:0)

: declare two methods and it should be public!!

公开 TheView(上下文关联)

public TheView(Context context,AttributeSet attrs)