2011-06-01 64 views
0

我需要在Java中創建一個按鈕。下面是我的代碼:在Java中創建按鈕會導致getLayoutParams返回空值

Button b = new Button(MyClass.this); 
b.requestLayout(); 
LayoutParams lp = b.getLayoutParams(); 
lp.height = LayoutParams.WRAP_CONTENT; 
lp.width = LayoutParams.WRAP_CONTENT; 
b.setLayoutParams(lp); 
b.setText("bla"); 
b.setTextSize(16); 
b.setOnClickListener(myListener); 

我再添加此按鈕到ListView的底部:

getListView().addFooterView(b); 

但是這個崩潰,因爲getLayoutParams返回null。

即使我創造新的LayoutParams代替getLayoutParams,即:

Button b = new Button(MyClass.this); 
LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
b.setLayoutParams(lp); 
b.setText("bla"); 
b.setTextSize(16); 
b.setOnClickListener(myListener); 

然後應用程序崩潰。沒有setLayoutParams,它運行良好,但我的按鈕大小不正確。

如何調整我的按鈕大小?

+0

我們可以看到logcat嗎? – LuxuryMode 2011-06-01 23:14:57

回答

0

因爲我通過ListView :: addFooterView添加此按鈕,事實證明我不得不使用ListView類型。

b.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.WRAP_CONTENT, ListView.LayoutParams.WRAP_CONTENT)); 

使用此代替LayoutParams解決了我的崩潰問題。希望這有助於他人。

0

如果您想從按鈕獲得LayoutParams,您必須將此按鈕添加到視圖。或者只是創建新的LayoutParams並進行設置。

+0

嗨小精靈,謝謝我剛剛更新了我的問題 - 我試圖創建新的LayoutParams,但這使我的應用崩潰。 – 2011-06-01 19:51:41

+0

目前尚不清楚爲什麼你的應用程序崩潰。所以請提供logcat輸出的堆棧跟蹤。 – Michael 2011-06-02 04:42:57

0

它返回null,因爲當你以編程方式創建一個小部件時,它沒有佈局參數! (除非你把它添加到一個視圖,然後它接收來自LayoutManager中的默認值)

編輯:以上是指你的代碼的3號線

設置他們是這樣的:

TextView moneyTV = new TextView(this); 
LayoutParams lp1 = new LayoutParams(HeightParamHere, WidthParamHere, WeightParamHere); 
moneyTV.setLayoutParams(lp1); 

EDIT2:這裏有一些readybake替換代碼。

Button b = new Button(MyClass.this); 
b.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
b.setText("bla"); 
b.setTextSize(16); 
b.setOnClickListener(myListener); 

假設你已經定義了myListener,這應該工作。

+0

嗨埃裏克,謝謝 - 我剛剛更新了我的問題,請參閱它的代碼 - 我試圖設置我的LayoutParams使用新的,但它會導致我的應用程序崩潰。在調用setListAdapter(adapter)之後發生崩潰。 – 2011-06-01 19:55:15

+0

你的應用在第2行和第3行崩潰。你正在請求不存在的參數,因此空指針異常。 – Eric 2011-06-01 19:57:31

+0

抱歉 - 我沒有正確更新我的問題,我更新了最後一段代碼,這仍然導致我的應用在調用setListAdapter(adapter)時崩潰。沒有對setLayoutParams的調用,它運行良好。 – 2011-06-01 20:02:01