Параметры макета не применяются при расширении содержимого из XML макета в настраиваемой ViewGroup

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

После короткой битвы с ним и после реализации всего, что было сказано в этот пост, мне удалось наконец-то отобразить контент, но по какой-то причине он выложен не так, как мне хотелось бы. В 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), но это заставило их растянуться, чтобы заполнить весь макет, один поверх другого.

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


person Igor K.    schedule 12.02.2012    source источник


Ответы (1)


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

person Igor K.    schedule 14.02.2012