2016-06-17 34 views
0

我在我的自定義視圖中編寫了一些如下圖所示的代碼。什麼時候會更新Android中的設置佈局參數後的視圖

RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) getLayoutParams(); 
lp.setMargins(100, 100, 0 ,0); 
lp.width = 200; 
lp.height = 200; 

我在最後一行使用斷點,並且在評估表達式窗口中發現getX()的值仍然爲0。

我想知道什麼時候會更新組佈局參數後的getX()的值,它應該是100

感謝。

+1

你是否將它設置爲像button1那樣的視圖.setLayoutParams(PARAMS); –

+0

是的,我設置了,但我試過setLayoutParams或不是沒有不同。 – aiueoH

回答

2

當您爲子視圖設置LayoutParams時,其父級將再次測量階段和佈局階段。

您的代碼setLayoutParams()將被添加到MessageQueue中執行。你在這裏使用斷點不會看到任何東西。

要獲得新LayoutParams,你應該張貼類似這樣的消息

yourView.post(new Runnable() { 
      @Override 
      public void run() { 
       v.getX(); 
      } 
     }); 

另一種方式:

yourView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       // get your view size here 
      } 
     }); 

如果您希望在每次您的視圖更新的LayoutParams,插入記錄裏面layout()方法你的自定義視圖

@Override 
public void layout(int l, int t, int r, int b) { 
    Log.d("alex.hong", "before X = " + getX()); 

    super.layout(l, t, r, b); 

    Log.d("alex.hong", "current X = " + getX()); 
} 
相關問題