2012-06-11 65 views
0

我有兩個按鈕放在佈局內部。我想'他們有相同的寬度。但每個按鈕的寬度必須等於其中最寬的那個。現在我使用ViewTreeObserver。android:按鈕的寬度相當於最寬的按鈕

class LayoutListener implements ViewTreeObserver.OnGlobalLayoutListener{ 
    private Button btn1, btn2; 

    public LayoutListener(Button b1, Button b2){ 
     btn1 = b1; btn2 = b2; 
    } 
    @Override 
    public void onGlobalLayout() { 
     int w1 = btn1.getWidth(); 
     int w2 = btn2.getWidth(); 
     if (w1 < w2) 
      btn1.setWidth(w2); 
     else 
      btn2.setWidth(w1); 
    } 
} 

但它不是很好的決定becase元素被顯示給用戶後重繪,它看起來很可怕。 和你可以猜測的問題,我如何達到需要的行爲?有沒有標記操作的方式,或者我應該實現特殊的代碼?最好避免創建可用作按鈕容器的自定義佈局。

回答

0

如果我在呼叫後直接呼叫getWidth它總是返回0. 爲了防止它在獲取大小之前我應該​​使用measure函數初始化測量過程。 這是我的代碼(但我不知道這是最好和最快的方法))):

.... 
view = inflator.inflate(R.layout.send_command_item, null); 
btnOff = (Button)view.findViewById(R.id.btnOff); 
btnOn = (Button)view.findViewById(R.id.btnOn); 
set_w(btnOff, btnOn); 
..... 

public void set_w(Button btn1, Button btn2) { 
    btn1.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    btn2.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    int w1 = btn1.getMeasuredWidth(); 
    int w2 = btn2.getMeasuredWidth(); 
    if (w1 < w2) 
     btn1.setWidth(w2); 
    else 
     btn2.setWidth(w1); 
} 
0

您可以比較活動的onCreate()方法中的按鈕寬度,然後設置它們,還是需要在不同的時間更改它們的大小?

編輯:

後您虛增您的看法,您可以創建兩個Button變量和使用(Button)yourViewName.findViewById(R.id.buttonid);約束他們。然後,您可以使用getWidth()和setWidth()根據需要進行比較和修改。

+0

我創建視圖:視圖= inflator.inflate(R.layout.list_view_item,空),並不能趕上創建方法。除此之外,如果我沒有弄錯(我是android開發中的新手),只有在onMesure方法中才有可能獲得計算大小,不是。 – DotNetter

+0

按鈕是否在xml文件中定義? – Nate

+0

對於遲到的回答感到抱歉。我需要擱置我的android項目一段時間。我嘗試了你的建議:看到我在這個主題的答案 – DotNetter