2013-07-25 69 views
1

我想在ScrollView中的Tablelayout中以編程方式設置按鈕的大小。在Tablelayout中設置其參數後,按鈕丟失

這裏是我的XML文件

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:scrollbarFadeDuration="1000" 
    android:scrollbarSize="12dip" > 
<TableLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/tablay" 
    tools:context=".MainActivity" 
    > 
    <Button 
     android:id="@+id/start" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/open" /> 
    <TableRow> 
      <ImageButton 
      android:layout_width="16sp" 
      android:layout_height="16sp" 
      android:contentDescription="@string/Delete" 
      android:src="@drawable/ic_delete" /> 

    </TableRow> 
</TableLayout> 
</ScrollView> 

這裏是我的java文件

private void setList(){ 
/* Create a new row to be added. */ 
    TableRow tr; 
    ImageButton delbtn; 
    int btnsize; 
    tr = new TableRow(this); 
    tr.setLayoutParams(new LayoutParams(
    LayoutParams.MATCH_PARENT, 
    LayoutParams.WRAP_CONTENT)); 
    delbtn = new ImageButton(this); 
    //delbtn.setText("Delete"); 
    //delbtn.setTextSize(TypedValue.COMPLEX_UNIT_SP,sys_def_char_font); 
    btnsize = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sys_def_char_font, getResources().getDisplayMetrics()); 
    delbtn.setId(i); 
    delbtn.setImageResource(R.drawable.ic_delete); 
    delbtn.setLayoutParams(new LayoutParams(btnsize,btnsize)); 
    tr.addView(delbtn); 
    tablay.addView(tr); 
} 

如果我在XML文件中相互添加按鈕,然後一切正常。

但我嘗試以編程方式添加它。而且,由於我想使編程方式增加的按鈕更小,我使用setLayoutParams來設置參數。

但是,我以編程方式添加的按鈕在setLayoutParams()後丟失。

請問任何人都可以告訴我錯在哪裏?

回答

1

我運行你的代碼,將sys_def_char_font更改爲5,它工作正常。我可以看到TableRow增加了button

我認爲這個問題是在下面的行...

btnsize = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sys_def_char_font, getResources().getDisplayMetrics()); 

什麼是sys_def_char_font?你在哪裏宣佈它?

我建議你檢查一下sys_def_char_font是什麼。 DOCS表示它必須是float

希望這會有所幫助。

+0

我在開頭聲明瞭sys_def_char_font。這是一個整數值「20」。在我嘗試了你的建議之後,我發現屏幕的大小導致了這個問題。 無論如何,謝謝你回答我的問題。 – wizoza68844

+0

@ wizoza68844:很高興答案有幫助。請不要忘記接受答案。謝謝。 – neo108