2013-08-01 18 views
1

我創建一個ImageView的編程方式:餘量設置程序不會立即應用到視圖

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(50,50); 
    lp.setMargins(4,4,4,4); 

    ImageView color = new ImageView(this); 
    color.setLayoutParams(lp); 
    colorPicker.addView(color); //adding view to linearlayout 
    Log.i("X", "" + color.getX()); 
    ... 

我嘗試通過color.getX()檢索color's X poistion,但由於某些原因,它返回0而不是4意味着它不是採取保證金考慮

也表現在,我發現requestLayout()可能會解決這個文檔一些搜索之後,但它不利於要麼

public void setMargins(int left,int top,int right,int bottom)

設置邊距(以像素爲單位)。對requestLayout()的調用需要完成,以便考慮新的邊距。根據佈局方向的不同,requestLayout()可能會覆蓋左右邊距。

UPDATE

如果我叫color.getX()的onClick監聽器裏如預期

+0

'getX()'根據視圖的父項返回座標。首先將視圖添加到某個父視圖組。 –

+0

將視圖添加到LinearLayout中,只是沒有將其添加到上面的代碼 – idanakav

+0

不應將日誌語句放置_after_添加視圖到佈局中? –

回答

2

返回4 widthheightmargins,一個View等沒有inmediately應用,您需要等待UI的大小和佈局在屏幕上。

getWidth() returns 0 if set by android:layout_width="match_parent"

試試這個:

ViewTreeObserver vto = color.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     this.layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     Log.i("X", "" + color.getX()); 

    } 
}); 

您將需要使 「色」 變finalglobal才能夠訪問它的listener內。

+0

謝謝!那確實有訣竅:),只是this.layout應該是我猜的顏色 – idanakav

相關問題