2013年4月18日星期四

android在程式中取得View的高度


基本上android在Activity的生命週期中,
是無法取得View的動度高度或寬度的,
原因是因為View尚未顯示出來,
所以程式取得的值都是0。

如果真的有需要取得這個View的高度或寬度時,
有兩個方法可以試看看
1.繼承一個View(視個人需要,繼承需要的View),並使用它(在XML或Code中)
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
在這個Method裡面可以取得Size變更前與變更後的高

2.新增監聽者(我的View是drawContent這個變數,這個Class) implements OnGlobalLayoutListener

drawContent = (RelativeLayout) view.findViewById(R.id.drawContent);
ViewTreeObserver vto = drawContent.getViewTreeObserver();
vto.addOnGlobalLayoutListener(this);

@Override
public void onGlobalLayout() {
if (drawContent.getWidth() != 0 && drawContent.getHeight() != 0) {
ViewTreeObserver obs = drawContent.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
//do things after get size
}
}

不過不管是第一點或第二點,
我在實作上都有碰到問題,
就是取得的Size並不是我想要的,
所以我在程式上動了一個手腳:
1.先在RelativeLayout裡加入一個ImageView
2.將這個ImageView的圖塞滿RelativeLayout,此時的RelativeLayout Size就會是我想要的最大值
3.在onGlobalLayout()中,將原本的ImageView作隱藏的動作,讓使用者看不到塞滿的圖。

為了這個,也是搞了一天,大家加油吧。

没有评论:

发表评论