2015-09-28 84 views

回答

1

由grennis(here)解决方案是正确的,也许只是解释它好一点:

1 .-添加您的FrameLayout的XML模板:

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

2:添加变量,并在您的Java活动或片段听众

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或完成imilar法):

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(); 

也许一些其他方面的考虑是,这一解决办法可能只在16 API工作+由于removeOnGlobalLayoutListener和在这个例子中,我在片段内工作

0

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