PreferenceFragment

时间:2016-01-18 18:03:54

标签: android android-layout

我在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;
}

2 个答案:

答案 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);