2013-11-28 72 views
0

我使用以下代码来创建使用按钮名称的数组中的水平布局按钮:如何在按下按钮时创建按钮?

LinearLayout tabView = (LinearLayout) findViewById(R.id.tabView); 
     tabView.setOrientation(LinearLayout.HORIZONTAL); //Can also be done in xml by android:orientation="vertical" 
      for (int i = 0; i < tabButtonNames.length; i++) { 
       Button btnTag = new Button(this); 
       btnTag.setText(tabButtonNames[i]); 
       btnTag.setWidth(50); 
       btnTag.setHeight(14); 
       btnTag.setTextSize(8); 
       btnTag.setId(i); 
       btnTag.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View arg0) { 
         ---the code TODO 
       }); 
       tabView.addView(btnTag); 
      } 

它们创建,但我不能改变的高度,并使用setWidthsetHeightLayoutParam按钮的宽度。然后在按下按钮时,我想使用一组按钮名称在垂直布局中创建更多按钮的列表。我在onClick方法中使用了与上面相同的代码,但应用程序在按下按钮时崩溃。另外Button btn=new Button(this)不能用于onClick。 我已经在i-Pad应用程序中轻松做到了这一点,但在这里我遇到了麻烦。

+0

使用按钮BTN =新按钮(getApplicationContext()); –

+0

请发布您的完整相关代码和logcat错误.. –

回答

6

使用

Button btn = new Button(getApplicationContext()); 

OR

Button btn = new Button(ActivityName.this);

,而不是

Button btn = new Button(this); 

由于按钮需要上下文。而在OnClick中,Activity的上下文无法访问。

+0

如果我想使用我自己的方法怎么办?我必须使用clickListener吗? –

+0

如果你想要添加点击按钮。你需要实现Click Listener –

1

Button btn=new Button(this)实际上是指您的clicklistiner,您必须引用您的class, Button btn=new Button(classname.this)或在clickListener之外创建一个简单的函数。

1

只是通过在新按钮的上下文(),并设置布局则params的代替高度和宽度

for (int i = 0; i < tabButtonNames.length; i++) { 
       Button btnTag = new Button(<-Context->);//You need to pass context just write <ActivityName>.this 
       btnTag.setText(tabButtonNames[i]); 
       LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(<width>,<height>);(50,40) 


       //btnTag.setWidth(50); 
       //btnTag.setHeight(14); 
       btnTag.setTextSize(8); 
       btnTag.setId(i); 
       btnTag.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View arg0) { 

         } 



       }); 
       tabView.addView(btnTag); 
       btnTag.setLayoutParams(params) 
}