2011-01-12 77 views
0

有沒有辦法在XML中聲明一行按鈕,這樣所有的按鈕都有相同的寬度,這等於最寬按鈕的wrap_content寬度?我熟悉將所有寬度設置爲0並將它們全部賦予1的權重的技巧,但如果父級佈局寬度設置爲wrap_content,則不起作用。我不想將父寬度設置爲fill_parent,因爲我不希望按鈕拉伸超過必要。在Android XML中是否有一種方法可以將寬度設置爲最寬按鈕的一排按鈕?

我能想到做到這一點的唯一方法是在代碼中(每個按鈕中的onMeasure邏輯與其他按鈕進行通信或使用自定義佈局類)。

回答

0

我想你必須在代碼中這樣做。

創建一個自定義佈局類將是要走的路。覆蓋onMeasure()並使其看起來像這樣:

  1. 在所有孩子上調用setLayoutParams將其layout_widths設置爲WRAP_CONTENT。
  2. 調用super.onMeasure()
  3. 迭代子視圖以查找具有最大getMeasuredWidth()的視圖。
  4. 使用最寬的像素寬度遍歷其他所有調用setLayoutParams()的子視圖。
  5. 再次調用super.onMeasure()。 :)

應該工作,但我不會股份還有我的名譽......樂意幫助你進一步,如果它沒有。

+0

聽起來好像沒有辦法只用XML來完成它。我以前很怕那個。很遺憾Android沒有像J2SE的GridLayout這樣的東西。 – 2011-01-13 00:04:45

0

爲了讓按鈕在XML行,你需要在一個LinearLayout中的orietnation添加按鈕,切換到橫向即

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
</LinearLayout> 

至於獲得最廣泛的按鈕,並改變所有其它按鈕以匹配我不知道作爲一個猜測,你將不得不在活動中有某種方法來獲得最廣泛的按鈕,然後programaticaly設置所有其他按鈕是相同的。

0

只要找出你最寬的按鈕是什麼,但它在一個水平寬度匹配的視圖,然後在< 2.3使用layout_width =「match_parent」或「fill_parent」。

這將使他們都使用分配的寬度。

如果你想以編程方式做,你需要迭代所有的部分,找到最大值,然後再次迭代並設置它。