fragment中獲取控制元件的寬和高的方法
阿新 • • 發佈:2019-02-17
有時候我們需要獲得控制元件的大小,但是在Activity的onCreate()生命週期方法中呼叫getWidth()和getHeight()方法並不能獲得控制元件的寬和高,因為此時我們的介面並未被繪製完成。不過我們卻可以在onWindowFocusChanged(boolean hasFocus)這個方法中獲得控制元件的大小。
Java程式碼- @Override
- public void onWindowFocusChanged(boolean hasFocus) {
- super.onWindowFocusChanged(hasFocus);
- int height = titleLeftBtn.getHeight();
- int width = titleLeftBtn.getWidth();
- }
當前視窗的Activity在獲得或者失去焦點的時候就會呼叫這個方法,它是這個Activity是否對使用者可見的最好標誌。
那麼對於Fragment又該怎麼辦呢?Fragment並未提供類似onWindowFocusChanged的方法。這時我們就需要用到ViewTreeObserver了。
- ViewTreeObserver observer = layoutIndex.getViewTreeObserver();
-
observer.addOnPreDrawListener(new
- publicboolean onPreDraw() {
- if (!isMeasured) {
- int layoutHeight = layoutIndex.getMeasuredHeight();
- isMeasured = true;
- }
- returntrue;
- }
- });
-
ViewTreeObserver observer = view.getViewTreeObserver();
- observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
- publicboolean onPreDraw() {
- if (!isMeasured) {
- int viewHeight = layoutIndex.getMeasuredHeight();
- isMeasured = true;
- }
- returntrue;
- }
- });
顧名思義,這是個對檢視變化進行監聽的觀察者。提供了以下介面,大家可以自己試著測試一下。
- interface ViewTreeObserver.OnPreDrawListener
- interface ViewTreeObserver.OnGlobalFocusChangeListener
- interface ViewTreeObserver.OnGlobalLayoutListener
- interface ViewTreeObserver.OnScrollChangedListener
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO 自動生成的方法存根
int viewWidth = view.getWidth();
}
});