Android自定义视图(非常基础)

时间:2012-08-27 18:50:17

标签: android view

我是Android开发的新手,我正在尝试实现自定义视图,作为我的应用的“自定义菜单按钮”。

我按照http://developer.android.com/training/custom-views/create-view.html的说明操作,但在实施结束时,我收到一条消息“很遗憾,customviews1已经停止”,应用程序关闭了。

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

  1. 在Eclipse中创建一个名为“customviews1”

  2. 的新Android项目
  3. 我运行项目并在“activity_main.xml”布局文件中显示“Hello World”TextView

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

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

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

  7. 我在这里找不到任何代码吗?

    感谢您的任何线索, 问候, Victor Reboucas

3 个答案:

答案 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>

希望这会对你有所帮助