1

我正在扩展Button视图以MyButton添加一些定制方法,即

public class MyButton extends Button {

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

    // Bespoke methods etc.

}

然后在布局xml中

<com.package.mine.MyButton
        android:id = "@+id/button"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        />    

这行得通 - 太棒了!但是,当我尝试将MyButton类作为static内部类放在我的活动中时,应用程序不断崩溃,即在我定义MyButton为的活动中

public static class MyButton extends Button {

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

    // Bespoke methods etc.

}

我在 xml 布局中将其称为

<com.package.mine.MyActivity.MyButton
        android:id = "@+id/button"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        />

manifest文件中的package定义为package="com.package.mine",logcat报错为:

java.lang.ClassNotFoundException: Didn't find class "com.package.mine.MyActivity.MyButton" on path: DexPathList[[zip file "/data/app/com.package.mine-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.package.mine-1, /vendor/lib, /system/lib]]

无法弄清楚我哪里出错了。有任何想法吗?谢谢。

4

1 回答 1

3

com.package.mine是您的包名称,并且MyButton是您的自定义按钮类名称。

因此,您应该在包名称下拥有该类。你在做什么是错误的。

将您的自定义按钮类放在一个单独的文件中。你的包名不是com.package.mine.MyActivity. 这是com.package.mine

如果你想要一个内部类,你可以这样做

    public class MainActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyButton mb = new MyButton(this);
        setContentView(mb);
        mb.setText("hello");
    }
    public  class MyButton extends Button {

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

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

        @Override
        public void setText(CharSequence text, BufferType type) {
            // TODO Auto-generated method stub
            super.setText(text, type);
        }
    }
}
于 2013-08-27T13:27:48.657 回答