Как установить высоту макета после того, как макет уже создан

Я потратил несколько часов, пытаясь это сделать, но в конце концов сдался.

У меня есть линейный макет. Внутри него у меня есть еще один LinearLayout, который изначально скрыт. Когда возникает какое-то условие, мне нужно, чтобы этот скрытый макет отображался, а содержащий макет увеличивал свою высоту, чтобы отобразить показанный макет.

Я могу обнаружить, что макет отображается, однако содержащий макет не расширяется. Проблема в том, что после содержания макета есть еще один макет, который мне нужно переместить вниз, чтобы можно было увидеть новый макет.

Это я сделал наконец:

                                sublay.setVisibility(View.VISIBLE);
                                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
                                layout.setLayoutParams(lp);
                                layout.requestLayout();

Конечно, это не сработало. Как мне это сделать?


person jstuardo    schedule 24.10.2015    source источник
comment
stackoverflow.com/questions/6798867/ вы прошли этот вопрос   -  person soumya sambit Kunda    schedule 24.10.2015
comment
Да.. не сработало... странно, что layout.getLayoutParams().height изначально равен -1   -  person jstuardo    schedule 24.10.2015
comment
Вы изначально добавили свойства высоты и ширины в свой дизайн xml, где вы добавляете visibility = false ?   -  person soumya sambit Kunda    schedule 24.10.2015
comment
он показывает -1 означает, что вы не добавили высоту и ширину в xml   -  person soumya sambit Kunda    schedule 24.10.2015
comment
Я создал макет контейнера программно, а не с помощью XML, и я сделал: final LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); для этого   -  person jstuardo    schedule 24.10.2015
comment
И это для скрытого макета: final LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);   -  person jstuardo    schedule 24.10.2015
comment
ваш макет контейнера является линейным макетом?   -  person soumya sambit Kunda    schedule 24.10.2015
comment
LinearLayout.LayoutParams.WRAP_CONTENT добавьте это в свой макет контейнера и прокрутку, чтобы увидеть, правильно ли он работает.   -  person soumya sambit Kunda    schedule 24.10.2015
comment
возможно, вы просто написали с ошибкой, и вам нужно было вызвать sublay.setLayoutParams(lp); sublay.requestLayout(); вместо layout.setLayoutParams(lp); layout.requestLayout();   -  person Vitaly Zinchenko    schedule 24.10.2015
comment
нет .... sublay уже имеет параметры, как я написал в комментарии. Что мне нужно сделать, так это увеличить высоту макета контейнера, потому что высота подслоя была установлена ​​​​правильно. Я могу это проверить, потому что, если я устанавливаю высоту макета контейнера при его создании, высота устанавливается правильно, и я могу видеть подложку.   -  person jstuardo    schedule 24.10.2015


Ответы (1)


Попробуйте sublay.getLayoutParams().height = MATCH_PARENT; sublay.getLayoutParams().width = MATCH_PARENT;

person Tim Sanch.    schedule 24.10.2015
comment
возможно, макет правильно расширяется, но другой макет ниже не перемещается вниз - person jstuardo; 24.10.2015