«Рабочее пространство» дочерних просмотров не заполняет высоту в приложении Google «iosched» - PullRequest
3 голосов
/ 03 июня 2011

Я играю с приложением iosched из Google I / O 2011. Глядя на ScheduleFragment, я тестирую другое представление о рабочей области потомков для бросаниястраницы назад и вперед.Тем не менее, у меня возникают проблемы с получением представления моего ребенка, чтобы заполнить родителя.Я добавил несколько цветов фона и отступы, чтобы показать, где все находится.Вот мой тест ...

Я добавил красный цвет фона для элемента "Рабочая область" в фрагменте_schedule.xml следующим образом ...

android:background="#cc0000"

Затем, вместо использования blocks_content.xmlдля дочернего представления я создал свой собственный pending_content.xml, который представляет собой просто LinearLayout на зеленом фоне (с fill_parent для высоты) и TextView на синем фоне (также с fill_parent для высоты) с простой текстовой строкой.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#00cc00"
    android:padding="5dip"
    xmlns:android="http://schemas.android.com/apk/res/android">
        <TextView
        android:id="@+id/text_view"
        android:background="#0000cc"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:text="Pending Content"
        android:textColor="#ffffff"
        />
</LinearLayout>

Я добавляю свое представление так же, как в приложении ввода-вывода есть «дни» ...

ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_schedule, null);
mWorkspace = (Workspace) root.findViewById(R.id.workspace);

ShootView view = new ShootView();
view.index = mViews.size();
view.rootView = (ViewGroup) inflater.inflate(R.layout.pending_content, null);
view.label = "Pending";
mWorkspace.addView(view.rootView);
mViews.add(view);

И вот что я вижу, когда смотрю его на устройстве:

http://www.milescrew.com/images/workspace.png

Вы увидите, что красное рабочее пространство заполняет доступное родительское пространство, а зеленое LinearLayout - нет.Чего мне не хватает?

Ответы [ 2 ]

3 голосов
/ 03 июня 2011

Проблема в том, что на шаге инфляции:

view.rootView = (ViewGroup) inflater.inflate(R.layout.pending_content, null);

Вы теряете LayoutParams, определенный в вашем XML, и ваше представление фактически заканчивается параметрами макета по умолчанию.

Что вам нужно сделать, это предоставить root и просто не прикреплять раздутый макет к корню во время инфляции:

view.rootView = (ViewGroup) inflater.inflate(R.layout.pending_content, mWorkspace, false);

Это позволит инфлятору макета создать соответствующий набор LayoutParams для вашего дочернего представления из проанализированных атрибутов XML.

0 голосов
/ 07 июня 2011

Я нашел решение. Я начал отладку onLayout в Workspace.java. При вызове функции child.layout я изменил child.getMeasuredHeight() на this.getMeasuredHeight(), чтобы использовать вместо него высоту рабочей области.

Кажется, работает нормально для случая, когда страница короче, чем высота рабочего пространства, а также дочернего объекта, который больше (длинный ListView), который больше, чем высота рабочего пространства.

...