我是Android开发的新手,我正在尝试实现自定义视图,作为我的应用的“自定义菜单按钮”。
我按照http://developer.android.com/training/custom-views/create-view.html的说明操作,但在实施结束时,我收到一条消息“很遗憾,customviews1已经停止”,应用程序关闭了。
我的方法很简单,我找不到任何关于解决这个基本问题的参考。这就是我正在做的事情:
在Eclipse中创建一个名为“customviews1”
我运行项目并在“activity_main.xml”布局文件中显示“Hello World”TextView
我添加了一个名为MyCustomView的新类,它将“View”扩展到项目的“src”文件夹
public class MyCustomView extends View {
public MyCustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
我从activity_main.xml中删除了“TextView”标记,并为其添加了“customview1”:
<com.example.customviews1.MyCustomView android:id="@+id/myCustomView1" />
我再次运行应用程序并收到消息“不幸的是,customviews1已经停止”并且应用程序关闭了。
我在这里找不到任何代码吗?
感谢您的任何线索, 问候, Victor Reboucas
答案 0 :(得分:4)
如果你检查你的LogCat输出,你会发现一个错误,说你必须在你的布局中指定layout_width和layout_height。
所以写:
<com.example.customviews1.MyCustomView android:id="@+id/myCustomView1"
android:layout_width="match_parent" android:layout_height="match_parent"/>
它应该有用。
答案 1 :(得分:0)
我认为你不能这样做,你必须覆盖视图类中的所有方法,如onDraw()
和其他,阅读更多关于它的信息
答案 2 :(得分:0)
请尝试以下。我试过这个并取得成功。 首先,你必须覆盖所有三个超类构造函数。
要在视图中显示某些内容,您必须覆盖onDraw()
方法。
public class MyCustomView extends View {
//variables and objects
Paint p;
//override all three constructor
public MyCustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public MyCustomView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyCustomView(Context context) {
super(context);
init();
}
//do what you want in this method
@Override
protected void onDraw(Canvas canvas) {
canvas.drawText("This is custom view this can be added in xml", 10, 100, p);
canvas.drawRect(20, 200, 400, 400, p);
super.onDraw(canvas);
}
//all the initialization goes here
private void init() {
p =new Paint();
p.setColor(Color.RED);
}
}
在xml
文件中将其包含在以下示例中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.sanath.customview.MyCustomView
android:id="@+id/myCustomView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
</RelativeLayout>
希望这会对你有所帮助