0

我是 Android 开发的新手,我正在尝试实现一个自定义视图来充当我的应用程序的“自定义菜单按钮”。

我按照http://developer.android.com/training/custom-views/create-view.html上的说明进行操作,但在实施结束时,我收到一条消息“不幸的是 customviews1 已停止”并且应用程序刚刚关闭.

我的方法非常简单,我找不到任何关于解决这个基本问题的参考。这就是我正在做的事情:

  1. 在 Eclipse 中创建一个名为“customviews1”的新 Android 项目

  2. 我运行该项目,它在“activity_main.xml”布局文件上显示了一个“Hello World”TextView

  3. 我添加了一个名为 MyCustomView 的新类,它将“View”扩展到项目的“src”文件夹

    public class MyCustomView extends View {
        public MyCustomView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    }
    
  4. 我从 activity_main.xml 中删除了“TextView”标签,并在其中添加了一个“customview1”:

    <com.example.customviews1.MyCustomView android:id="@+id/myCustomView1" />
    
  5. 我再次运行该应用程序,我收到一条消息说“不幸的是 customviews1 已停止”并且该应用程序关闭了。

我在这里缺少任何代码吗?

感谢您提供任何线索,问候,维克多·雷布卡斯

4

3 回答 3

4

如果您检查 LogCat 输出,您会发现一个错误,说明您必须在布局中指定 layout_width 和 layout_height。

所以写:

<com.example.customviews1.MyCustomView android:id="@+id/myCustomView1" 
   android:layout_width="match_parent" android:layout_height="match_parent"/>

它应该可以工作。

于 2012-08-27T18:53:42.230 回答
0

我认为你不能那样做,你必须覆盖视图类onDraw()和其他类的所有方法,阅读更多关于它的信息

于 2012-08-27T18:53:23.003 回答
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>

希望对你有帮助

于 2012-08-27T19:33:51.750 回答