2011-04-17 69 views
5

我的問題很簡單,我試圖以動態地改變這個按鈕的寬度:動態更改按鈕的寬度在Android的

按鈕>的android:layout_height =「35dip」機器人:背景= 「@ drawable/buttonlesson」android:text =「Level 3 [TAP HERE]」android:onClick =「MenuLI1L3」android:layout_width =「300dp」android:id =「@ + id/II3」> /按鈕「

這裏是我使用的代碼:

Button myButton = (Button) findViewById(R.id.II3); 
myButton.setWidth(10); 
myButton.setText("kl"); 

文本確實會改變,但不是寬度。聽起來像是有一個錯誤。 右側有另一個按鈕,當該按鈕縮小到10像素時,該按鈕可以填補空白,所以我也無法更改上面的Linearlayout。

任何解釋&解決方案?它應該沒有工作?謝謝

回答

0

建議嘗試在父視圖上調用invalidate()(這會導致對所有子項(包括按鈕)的繪圖調用)。這可能不起作用,因爲您還需要按鈕重新運行其onMeasure()邏輯(它在繪圖之前運行)。

玩耍無效或任何其他方法,這將導致父母調用子的onMeasure。

+2

感謝您的建議!在圖層上或按鈕上的無效()雖然沒有做任何事情....但myButton.bringToFront();以某種方式解決。 – Simon 2011-04-19 05:49:31

+0

我還沒有玩過bringToFront(),但我不禁想知道它是否導致按鈕來運行它的onMeasure()?那麼,至少你是起來工作。做得很好。 – BonanzaDriver 2011-04-19 15:14:11

2

我認爲wrap_content不適用於你的具體情況,對不對? 如果你需要絕對的寬度,那麼你需要分配一個通過new LayoutParameters,即

myButton.setLayoutParams(new LinearLayout.LayoutParams(
    30 * someDensityFactor, LinearLayout.LayoutParams.WRAP_CONTENT 
)) 

其中someDensityFactor是您的屏幕密度(浮動)。您也可能需要使您的佈局無效,然後才能重新繪製按鈕。

+0

感謝提示,當我這樣做,但它實際上使應用程序崩潰... – Simon 2011-04-19 05:47:11