2015-09-14 2 views
0

У меня есть следующий макет:setLayoutParams не работает на ToggleButton

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
     <TableLayout 
      android:id="@+id/master_table" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:stretchColumns="1"> 

     </TableLayout> 
</LinearLayout> 

В коде я добавить некоторые кнопки в макет таблицы, который заполнит добавил кнопки на 4 в ряд:

Чтобы добавить кнопки:

TableRow row = createTableRow(); 
row.addView(createToggleButton(R.id.button1, getResources().getText(R.string.button1))); 
row.addView(createToggleButton(R.id.button2, getResources().getText(R.string.button2))); 
row.addView(createToggleButton(R.id.button3, getResources().getText(R.string.button3))); 
row.addView(createToggleButton(R.id.button4, getResources().getText(R.string.button4))); 

TableLayout parent = (TableLayout)findViewById(R.id.master_table); 
parent.addView(firstRow); 

Оригинальная версия createToggleButton (метод):

private ToggleButton createToggleButton(int id, CharSequence text) { 
    ToggleButton button = new ToggleButton(this); 
    button.setId(id); 
    button.setTextOff(text); 
    button.setTextOn(text); 
    button.setChecked(false); 
    button.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.button, this.getTheme())); 
    button.setTextColor(getResources().getColorStateList(R.color.button_color)); 

    return button; 
} 

Эта работа, мои кнопки добавлены в представление. Но когда я пытаюсь применить LayoutParams, как показано ниже:

private ToggleButton createToggleButton(int id, CharSequence text) { 
    ToggleButton button = new ToggleButton(this); 
    // This line cause the button disappeared !? 
    button.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f)); 
    button.setId(id); 
    button.setTextOff(text); 
    button.setTextOn(text); 
    button.setChecked(false); 
    button.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.button, this.getTheme())); 
    button.setTextColor(getResources().getColorStateList(R.color.button_color)); 

    return button; 
} 

Мои кнопки больше не будут появляться на виду, даже хотя есть ошибки не произошло. Что здесь происходит?

+0

Если вы откатить использовать "оригинальную версию" это действительно работает? Я сомневаюсь –

ответ

0

Ошибка должна быть вызвана шириной TableRow, а ее дети ToggleButton взаимозависимы.

набора LayoutParam для TableRow

row.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT); 

изменить также макет ToggleButton к этому

button.setLayoutParams(new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, 1.0f)); 
+0

Да, вы правы. Он работает сейчас. Спасибо за помощь. – RyanB

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