将按钮添加到android.view.view

将按钮添加到android.view.view,android,Android,我有下一期: 我有一个活动,我想尝试添加按钮,这是我的onCreate方法 public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); DrawView drawView = new DrawView(this); setContentView(drawView); context = this; drawView.requestFocus(

我有下一期:

我有一个活动,我想尝试添加按钮,这是我的onCreate方法

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    DrawView drawView = new DrawView(this);
    setContentView(drawView);

    context = this;

    drawView.requestFocus();

}
这是DrawView类

公共类DrawView扩展了视图实现OnTouchListener{

public static final String TAG = "DrawView";

private List<List<Point>> listaPuntos = null;
private List<Paint> listaPaints = null;

private int paintActual = 0;

public DrawView(Context context) {
    super(context);
    setFocusable(true);
    setFocusableInTouchMode(true);

    listaPaints = new ArrayList<Paint>();
    listaPuntos = new ArrayList<List<Point>>();

    this.setOnTouchListener(this);
    this.setBackgroundColor(Color.WHITE);

    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(2);
    paint.setColor(Color.BLACK);
    listaPaints.add(paint);

}

@Override
public void onDraw(Canvas canvas) {

    for(int i=0; i<listaPaints.size(); i++){
        Paint paint = listaPaints.get(i);
        Point punto = null;
        if(listaPuntos.size()!=0 && listaPuntos.size()>i){
            List<Point> puntos = listaPuntos.get(i);
            for (Point point : puntos) {

                if(punto == null){
                    punto = point;
                }
                canvas.drawLine(point.x, point.y, punto.x, punto.y, paint);
                punto = point;
            }
        }
    }
}

@Override
public boolean onTouch(View view, MotionEvent event) {

    if(event.getAction() != MotionEvent.ACTION_UP){
        Point point = new Point();
        point.x = event.getX();
        point.y = event.getY();
        point.paintPunto = paintActual;
        if(listaPuntos.size()<=paintActual){
            listaPuntos.add(new ArrayList<Point>());
        }
        listaPuntos.get(paintActual).add(point);
        invalidate();
        return true;
    }else{
        paintActual++;
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(2);
        paint.setColor(Color.BLACK);
        listaPaints.add(paint);
    }
    return super.onTouchEvent(event);
}
public static final String TAG=“DrawView”;
私有列表listaPuntos=null;
私有列表listaPaints=null;
私有int paintActual=0;
公共绘图视图(上下文){
超级(上下文);
设置聚焦(真);
setFocusableInTouchMode(真);
listaPaints=新的ArrayList();
listaPuntos=newarraylist();
this.setOnTouchListener(this);
这个.setBackgroundColor(Color.WHITE);
油漆油漆=新油漆(油漆.防油漆别名标志);
绘制.设置样式(绘制.样式.笔划);
油漆。设置行程宽度(2);
油漆。设置颜色(颜色。黑色);
listaPaints.add(绘制);
}
@凌驾
公共空白onDraw(画布){
对于(int i=0;ii){
List puntos=listapintos.get(i);
用于(点:puntos){
如果(punto==null){
punto=点;
}
画布.抽绳(点.x,点.y,punto.x,punto.y,绘画);
punto=点;
}
}
}
}
@凌驾
公共布尔onTouch(视图、运动事件){
if(event.getAction()!=MotionEvent.ACTION\u UP){
点=新点();
point.x=event.getX();
point.y=event.getY();
point.paintPunto=paintActual;

如果(listaPuntos.size()您应该创建一个XML布局文件,该文件将通过onCreate()中的setContentView()调用与您的活动相关联

您的布局将包含您自己的视图、按钮和任何您喜欢的内容。

只有视图组(LinearLayout、RelativeLayout)可以有子视图。您要做的是将DrawView作为活动的内容视图,而不是容器(视图组),因此,您不能向其中添加任何其他视图(子视图)。
您的问题的解决方案是:

  • 创建包含其他视图或空视图的xml布局文件,并将视图组作为父视图(LinearLayout、RelativeLayout等)
  • 创建DrawView的实例
  • 将此实例添加到视图组
  • 类似地,如果要动态添加视图,请创建其他视图的实例并将其添加到父视图中。 以下是此示例代码:
假设id为父级的LinearLayout是xml布局的父级,则:

LinearLayout parent = (LinearLayout)findViewById(R.id.parent);
//creating instance of custom view
DrawView drawView = new DrawView(this);
//adding custom view as the first child
parent.addView(drawView,0);
//adding button dynamically
Button btn = new Button(this);
btn.setText("Ok");
parent.addView(btn,1);

您应该创建一个xml文件,并且必须像setContentView(R.layout.filename)一样使用它由于您正在尝试将其他页面内容合并到此xml中,您现在应该包含布局,您可以使用此页面id并实现任何功能。因此,最好是在其他xml中添加按钮,然后将其包含在新的所需xml中。。这是一种正确的方式……希望您理解我的意思。否则你可以在developer.android.com上搜索