我在FrameLayout
内有多个ScrollView
。其中一个FrameLayout
我正在加载PreferenceFragment
。现在我需要将FrameLayout
的高度设置为PreferenceFragment
的高度,以避免嵌套滚动(PrefrenceFragment
也可滚动)。
如何获得PreferenceFragment
的高度?
我尝试覆盖onCreateView()
类中的PreferenceFragment
,并调用View.getHeight()
,但它只返回0。
将FrameLayout
设置为wrap_content
,效果不佳,只需占用一个偏好空间...
修改
我现在尝试使用addOnGlobalLayoutListener()
获得高度,但返回的值只是显示的高度,而不是PreferenceFragment
的完整高度。所以我只是获得wrap_content
的一个偏好的高度,例如如果我在xml中将FrameLayout
的高度设置为300,则为300。我需要所有偏好的全部高度(visibile而不是)。
@Override
public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle)
{
final View v = super.onCreateView(paramLayoutInflater, paramViewGroup, paramBundle);
if (v != null) {
ViewTreeObserver vto = v.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Log.d("TEST", "Height = " + v.getHeight() + " Width = " + v.getWidth());
ViewTreeObserver obs = v.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
}
});
}
return v;
}
答案 0 :(得分:0)
您应该在活动中等待WindowFocusChange:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
if(hasFocus)
//LAYOUT FRAGMENT NOW
}
答案 1 :(得分:0)
试试这个
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
height = parentLayout.getheight();// the root layout of the fragment
//TODO:
}
}, 200);