如何正确扩展ImageButton?

时间:2011-06-12 21:44:28

标签: android xml extend imagebutton

我想在我选择调用“DialButton”的新类中扩展ImageButton类的功能。首先,我简单地扩展了ImageButton,并没有添加任何新内容。在我看来,这应该与普通的ImageButton类相同。

package com.com.com;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageButton;

public class DialButton extends ImageButton{

    public DialButton(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public DialButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    public DialButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
    }

}

我在XML中插入一个DialButton(不要担心文件的其余部分,它无关紧要)

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:stretchColumns="1">
    <TableRow
    android:layout_weight="1">
        <DialButton
            android:id="@+id/button1"
            android:background="@drawable/dialpad"
            android:layout_weight="1"/>

在我的活动中使用XML:

package com.com.com;

import android.app.Activity;
import android.os.Bundle;

public class Android3 extends Activity {

    DialButton button1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.maintable);   
    }
}

所有内容都在模拟器中编译和安装,但是当应用程序启动时,强制关闭我。如果我将XML组件从DialButton更改为ImageButton,一切正常。为什么是这样? ImageButton类和我的DialButton类有什么区别导致DialButton组件崩溃应用程序?

1 个答案:

答案 0 :(得分:11)

在您的布局文件中,您必须为自定义小部件提供“完全限定”的名称,如下所示......

<com.mycompany.myapp.DialButton
    android:id="@+id/button1"
    android:background="@drawable/dialpad"
    android:layout_weight="1"/>