我正在尝试使用自定义视图创建应用,并且我不断收到“错误充气类”。 一定是我在自定义视图方面缺少一些基础知识,但我不确定是什么。这是一个非常简单的自定义视图程序,还需要什么来使它工作?
(注意:为了这个问题,我将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>
答案 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)