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