getViewTreeObserverのAndrewsビュー()。 AddOnGlobalLayoutListener()
Andrews View Getviewtreeobserver
View.getWidthとView.getHeightのoncreateで、ビューの高さと幅を取得しません。
onResumeコールバック後に完了するコンポーネントのレイアウトを表示するためです。
必須のgetViewTreeObserver()。 AddOnGlobalLayoutListener()を使用して、幅または高さを取得します。
これは、道を見ることができる幅と高さの1つです。
OnGlobalLayoutListenerはViewTreeObserver内部クラスであり、変更のツリービューのレイアウトがViewTreeObserverリッスンすることができます。これは、ツリーのビューが登録されたオブザーバー(オブザーバー)をリッスンし、ツリービューが変更されたときに通知されるグローバルイベントです。
ViewTreeObserverは直接インスタンス化されませんが、()はgetViewTreeObserverによって取得されます。
// addition OnGlobalLayoutListener, ViewTreeObserver inner classes there are the following: interface ViewTreeObserver.OnGlobalFocusChangeListener // callback function when the focus state in a tree view is changed, to be called the interface class interface ViewTreeObserver.OnGlobalLayoutListener // callback function when the visual state change occurs or global placement in a tree view in the tree view of a view is changed, to be called the interface class interface ViewTreeObserver.OnPreDrawListener // callback function when a tree view will be drawn, to be called the interface class interface ViewTreeObserver.OnScrollChangedListener // callback function when a tree view of some components scrolled, to be called the interface class interface ViewTreeObserver.OnTouchModeChangeListener
タッチモードが変更のツリービューである場合、OnGlobalLayoutListenerを使用して実際の高さのビューを取得できます。
int mHeaderViewHeight mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener( new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { mHeaderViewHeight = mHeaderView.getHeight() // Remove observer getViewTreeObserver().removeGlobalOnLayoutListener(this) } })
注意:
OnGlobalLayoutListenerは複数回トリガーされる可能性があるため、高度にトリガーされた後、OnGlobalLayoutListenerが取り消されます。