Параметры макета не применяются при накачивании содержимого из макета XML в пользовательской ViewGroup - PullRequest
1 голос
/ 12 февраля 2012

Я использую LayoutInflater для добавления макета в пользовательскую ViewGroup (не подкласс ...Layout, а простая ViewGroup).

После короткой битвы с ним и после реализации всего, что было сказано в этой записи , мне удалось заставить контент, наконец, появляться, но по какой-то причине он не выложен так, как я хочу , В макете XML есть 3 элемента, которые необходимо распределить по горизонтали, при этом центральный элемент «толкает» их по краям.

Вот код, который раздувает макет:

private LayoutInflater inf = null;
private Paint backpaint = null;
private ViewGroup inflated = null;

private void inflate(Context context) {
    this.setBackgroundColor(0x00000000);
    inf = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    inflated = (ViewGroup)inf.inflate(R.layout.application_heading, null);
    this.addView(inflated, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
}

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    inflated.measure(r, b);
    inflated.layout(l, t, r, b);
}

Сначала я только добавил inflated.layout(l, t, r, b), но это не сработало. После того, как я добавил inflated.measure(r,b), я наконец-то увидел содержимое, но все это было склеено, как если бы LinearLayout, который был основой для раздутого XML, был установлен на WRAP_CONTENT.

Я пытался пробежаться по дочерним элементам inflated ViewGroup и вызывать .layout(l,t,r,b) для них, но это заставило их растягиваться, чтобы заполнить весь макет, один поверх другого.

Мне, должно быть, здесь не хватает чего-то очень маленького. Кто-нибудь знает, что это может быть?

1 Ответ

2 голосов
/ 14 февраля 2012

Переключил содержащий класс на подкласс RelativeLayout вместо ViewGroup, и все стало персиковым.

...