フラグメントがあり、画面上のビューの位置/幅/高さを測定し、他のクラスに渡す必要があります。
だから私が持っているのは、それを行う関数、次のようなものです:
private void measureTest(){
v = ourView.findViewById(R.id.someTextField);
v.getLocationOnScreen(loc);
int w = v.getWidth();
...
SomeClass.passLocation(loc,w);
...
問題は、フラグメントのライフサイクル内でビューの位置/幅/高さが準備できていないことです。したがって、これらのライフサイクル メソッド内でその関数を実行すると、次のようになります。
onCreateView
onViewCreated
onStart
onResume
位置と幅/高さの測定値が間違っているか、値が 0 になっています。私が見つけた唯一の解決策は、GlobalLayoutListener
このようなものをmainViewに追加することです
mainView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
if(alreadyMeasured)
mainView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
else
measureTest();
}
});
これで仕事は完了です..しかし、それはただのヤックです!IMO。
これを行うより良い方法はありますか?基本的なことのようです