2015-09-28 48 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