2013-07-18 6 views
0

Если я хочу добавить кнопку в этот класс, чтобы я мог вызвать onclicklistener, как мне это сделать? Я также предоставил класс активности, на который я добавляю это представление.добавление кнопки на вид программно

активность:

import android.app.Activity; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.Button; 
import android.widget.RelativeLayout; 

import android.content.Context; 



public class NewGame extends Activity { 

View view; 
Context context; 
RelativeLayout layout; 
GameView gameview; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    gameview=new GameView(this); 
    setContentView(gameview); 
    //layout = (RelativeLayout) findViewById(R.id.relative_layout); 



    //layout.addView(gameview); 

} 


} 

вид: общественный класс Gameview простирается вид { Path круг; Краска cPaint; Краска tPaint; String z; int i = 65, strt, arc, leftx, topy, rightx, bottomy, maxx, maxy; boolean flag1, flag2, flag3; double n1, n2; int n, n3 = 180, n4, n5 = 90; float f1 = 180, f2 = 90; Кнопка b1; Random r = new Random(); RectF oval;

public GameView(Context context) { 
     super(context); 

     leftx = 0; 
     topy = 60; 
     rightx = 150; 
     bottomy = 120; 

     z = String.valueOf(Character.toChars(i)); 

     cPaint = new Paint(); 
     cPaint.setColor(Color.RED); 

     strt = 45; 
     arc = 315; 

     n1 = Math.random() * 600; 
     Log.d("random", z); 

     if (flag2 == false) 
      new DrawThread(this); 

     // cPaint.setStrokeWidth(2); 
     tPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     tPaint.setStyle(Paint.Style.FILL_AND_STROKE); 
     tPaint.setColor(Color.BLACK); 
     float scale = getResources().getDisplayMetrics().scaledDensity; 
     tPaint.setTextSize(20 * scale); 
    } 

    public void onSizeChanged(int w,int h,int oldh,int oldw) { 
     maxx = oldw; 
     maxy = oldh; 
    } 

    //@Override 
    protected void onDraw(Canvas canvas) { 
     // Drawing commands go here 
     oval = new RectF(leftx,topy,rightx,bottomy); 
     canvas.drawArc(oval, strt, arc, true, cPaint); 
     while (i < 90) { 
      canvas.drawText(String.valueOf(Character.toChars(i)),f1,f2, tPaint); 
      break; 
     } 
    } 
} 

ответ

1

Вы можете сделать это следующим образом:

Button bt = new Button(this); 
bt.setText("A Button"); 
bt.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
linerLayout.addView(bt); 

И тогда вы можете сделать это

bt.setOnClickListener(new View.OnClickListener() { 

//TO DO 
} 

Я надеюсь, что это может помочь вам.

0

Прежде всего, чтобы ваш пользовательский вид имел метод addView (View v), он должен расширить ViewGroup вместо View; то вы можете использовать этот код

b1=new Button(context); 
b1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 
b1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     this.addView(b1); 
+0

после выполнения того, что вы упомянули выше, я теперь получаю пустой экран. Как вы думаете, может быть проблема? – user2586942

+0

попытайтесь установить id для кнопки b1.setId (1234) – Apperside

+0

, все еще получая пустой экран – user2586942

Смежные вопросы