android – 自定义视图在xml布局

我通过创建一个SurfaceView类的子类创建了我自己的视图.

但是我无法弄清楚如何从xml布局文件中添加它.我当前的main.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"
    >

<View
    class="com.chainparticles.ChainView"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" 
    />


</LinearLayout>

我错过了什么?

编辑

更多信息

我的看法是这样的

package com.chainparticles;
public class ChainView extends SurfaceView implements SurfaceHolder.Callback {
    public ChainView(Context context) {
        super(context);
        getHolder().addCallback(this);
    }
// Other stuff
}

这样做很好:

ChainView cview = new ChainView(this);
setContentView(cview);

但是尝试从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.chainparticles.ChainView
      android:layout_width="fill_parent"
      android:layout_height="fill_parent" 
     />
</LinearLayout>

编辑:

看到你的代码的其余部分可能会抛出,因为你不能在构造函数中调用getHolder来充电.将其移动到View on onFinishInflate

所以:

@Override
protected void onFinishInflate() {
    getHolder().addCallback(this);
}

如果这不工作,请尝试将其放在您在setContentView之后的Activitys onCreate中调用的init函数中.

这可能是以前工作的,因为当从xml构造函数充气时:
View(Context,AttributeSet)被调用而不是View(Context).

转载注明原文:android – 自定义视图在xml布局 - 代码日志