2013-04-04 5 views
1

Я пытаюсь добавить некоторые кнопки в свой TableRow во время выполнения. Мой TableRow имеет такую ​​структуру:Android: добавление кнопок во время выполнения

<TableRow 
      android:layout_marginTop="100px" 
      android:gravity="bottom" 
      android:paddingTop="50px" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/riga1"> 

      <Button 
       android:textSize="32px" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/buttonOK2" 
       android:text="YES" 
       android:onClick="setResult"/> 
     </TableRow> 

И мой Java-код:

TableRow tr = (TableRow) findViewById(R.id.riga1); 
     Button b = new Button(this); 
     b.setText("button 1"); 
     b.setId(1); 
     b.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     tr.addView(b); 

     Button b1 = new Button(this); 
     b1.setText("button 2"); 
     b1.setId(2); 
     b1.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     tr.addView(b1); 

Но это, кажется, не работает. В моей деятельности я вижу только кнопку, определенную в файле xml.

Другая проблема заключается в том, что, если я изложу в соответствующем TableLayout параметра:

android:stretchColumns="*" 

Я должен вставить (в XML-файле), по меньшей мере одна кнопка в TableRow вышеупомянутого TableLayout, в противном случае я получить " деление на нулевую ошибку "возле streatchColumns Что мне делать, чтобы позволить tableRow пустым?

+0

Добавить несколько кнопок в виде и нужно и сделать его видимым только тогда, когда вам нужно во время выполнения, –

+1

Спасибо @Ariu, но я не знаю, t думаю, что это изящное решение – GVillani82

ответ

1

Я думаю, что ваша проблема в том, что вы используете неправильный LayoutParams объект для ваших TextView попробуем это:

TableRow.LayoutParams layoutParams = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT); 

, а затем установить этот layoutParams объект:

b.setLayoutParams(layoutParams); 
+0

Вы правы @ Emil. Теперь это работает! Спасибо!:) – GVillani82

+0

Вы приветствуете, имейте приятное кодирование:) –

-1

сначала нужно найти кнопку, используя эту инструкцию

БТН = (Button) findViewById (R.id.Button1);

, чем вы можете установить видимость с помощью этого:

btn.setVisibility (View.INVISIBLE);

Затем вы можете установить видимость с помощью оператора:

btn.setVisibility (View.VISIBLE);

+0

он динамически добавляет, как он получит идентификатор? –

+0

Конечно, @ Ravi, я не могу использовать id! – GVillani82

0

Вместо план таблицы вы должны использовать относительный макет, это для меня попробовать.

В вашем 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" 
android:id="@+id/myMainRelativeLayout" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<Button 
    android:id="@+id/btnAdd" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="47dp" 
    android:text="Add Button" /> 

и ваш код Java, как сильфона

public class MainActivity extends Activity implements 
    android.view.View.OnClickListener { 

Button btnAdd; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    btnAdd = (Button) findViewById(R.id.btnAdd); 
    btnAdd.setOnClickListener(this); 

} 

@Override 
public void onClick(View v) { 
    if (v.getId() == R.id.btnAdd) { 
     RelativeLayout rl = (RelativeLayout)findViewById(R.id.myMainRelativeLayout); 
     Button btn = new Button(this); 
     btn.setId(1234); 
     btn.setText("Add Button Runtime"); 
     btn.setOnClickListener(this); 
     rl.addView(btn); 
    } 
    if(v.getId() == 1234) 
    { 
     Toast.makeText(getApplicationContext(), "This is Your New Button", Toast.LENGTH_LONG).show(); 

    } 
} 

}

попробовать это это действительно работает

+0

если мой ответ поможет вам, пожалуйста, проголосовать – Bhadresh

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