2012-06-10 4 views
1

У меня есть LinearLayout и динамически добавьте к нему три LinearLayouts. Каждый из LinearLayouts содержит кнопку. После нажатия одной из кнопок я хотел отобразить CalendarView на LinearLayout второго уровня. Отобразится представление, однако оно не отображается полностью. Я приложил скриншот визуализировать проблему: http://i.stack.imgur.com/CE9je.pngLinearLayout не правильно изменяет размер

Вот код для добавления макета:

LinearLayout.LayoutParams pLayouts = new LinearLayout.LayoutParams(
     LinearLayout.LayoutParams.MATCH_PARENT, 
     LinearLayout.LayoutParams.WRAP_CONTENT 
); 
hllCalendar = new LinearLayout(this); 
hllCalendar.setLayoutParams(pLayouts); 
hllCalendar.setId(hllCalendarID); 
hllCalendar.setOrientation(LinearLayout.VERTICAL); 
btCalendar = {some other code} 
hllCalendar.addView(btCalendar); 
hllComponents.addView(hllCalendar); 

А вот код для добавления CalendarView:

LinearLayout.LayoutParams pCalendar = new LinearLayout.LayoutParams(
     LinearLayout.LayoutParams.MATCH_PARENT, 
     LinearLayout.LayoutParams.WRAP_CONTENT 
); 
CalendarView cal = new CalendarView(this); 
cal.setLayoutParams(pCalendar); 
cal.setOnDateChangeListener(this); 
hllCalendar.addView(cal); 

Любой предложения о том, как я могу сделать календарь полностью видимым?

Здесь создается динамически макет для вашего удобства:

hllComponents pLayouts 
-hllCalendar pLayouts 
--btCalendar 
--CalendarView pCalendar 
-hllStartTime pLayouts 
--btStartTime 
-hllEndTime pLayouts 
--btEndTime 

Проблема такая же, как и в this post.

+0

Вам нужно будет добавить LayoutParams, который вы установите на соседние линейные макеты –

+0

@ZedScio LayoutParams для макетов - это pLayouts, как вы можете видеть в первом разделе кода. – Clemens

+0

Я имел в виду макеты, окружающие hllCalendar. Наиболее вероятным виновником является то, что hllCalendar не имеет достаточно места для изменения размера для wrap_content. Вы можете проверить это, поместив hllCalendar внутри прокрутки. Если вы можете прокручивать и просматривать весь вид, то проблема заключается в макетах выше и/или ниже hllCalendar, внутри hllComponents. –

ответ

0

Попробуйте вызвать layoutLayout() родительского макета.

Это сообщение отправит сообщение «relayout» в цикле сообщений пользовательского интерфейса. Это позволит вычислить новый размер макета после добавления календаря и, таким образом, полностью нарисовать его на экране.

+0

Несчастливо это не сработал. Я добавил эти строки ко второму фрагменту: 'hllCalendar.addView (cal); hllCalendar.requestLayout(); \t \t \t hllComponents.requestLayout(); ' – Clemens

Смежные вопросы