我将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"
/>
清单文件中的包定义为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]]
无法弄清楚我哪里出错了。有任何想法吗?感谢。
答案 0 :(得分:2)
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);
}
}
}