如何在ScrollView中决定Caldroid高度(如何确定嵌入在ScrollView中的GridView的高度)

时间:2015-09-28 07:35:44

标签: gridview calendar scrollview caldroid

当它嵌入ScrollView时,CaldroidFragment的大小会混乱。原因是Caldroid使用GridView来渲染日历,并且作为一个已知的问题,GridView无法在ScrollView中正确地测量它的高度,到目前为止还没有更好的解决方案。我尝试了一些提到here的变通方法,但到目前为止还没有找到任何可行的方法。

2 个答案:

答案 0 :(得分:1)

grennis(here)的解决方案是正确的,也许只是为了更好地解释它:

1.-在xml模板上添加FrameLayout:

<FrameLayout android:id="@+id/calendar_container"
        android:layout_width="match_parent"
        android:layout_height="999dp" />

2.-在Java Activity或Fragment上添加变量和监听器

 private ViewTreeObserver.OnGlobalLayoutListener CalendarViewTreeObserver = new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            calendarContainer.getViewTreeObserver().removeOnGlobalLayoutListener(CalendarViewTreeObserver);
            ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) calendarContainer.getLayoutParams();
            lp.height = ((ViewGroup)calendarContainer).getChildAt(0).getHeight();
            calendarContainer.setLayoutParams(lp);
            calendarContainer.requestLayout();
        }
    };
private FrameLayout calendarContainer;

3.-为变量日历容器分配适当的资源(可以在onCreate或类似的方法中完成):

calendarContainer = (FrameLayout) getActivity().findViewById(R.id.calendar_container);
        calendarContainer.getViewTreeObserver().addOnGlobalLayoutListener(CalendarViewTreeObserver);
        setCustomResourceForDates();

4.-使用事务

设置Caldroid片段
FragmentTransaction t = getActivity().getSupportFragmentManager().beginTransaction();
        t.replace(R.id.calendar_container, caldroidFragment);
        t.commit();

也许其他一些考虑因素是这个解决方法可能只适用于API 16 +,因为removeOnGlobalLayoutListener和示例中我在Fragment中工作

答案 1 :(得分:0)

终于找到了可行的解决方案。 gennis给出的解决方案here是正确的。我做的唯一更改是将代码calendarContainer.getViewTreeObserver().addOnGlobalLayoutListener(CalendarViewTreeObserver)放入CaldroidFragment的回调函数onCaldroidViewCreated