Ориентация макета в коде


90

В моем приложении есть этот код:

LinearLayout.LayoutParams params =
    new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);

и я просто хочу установить вертикальную ориентацию LinearLayout. Эквивалент в XML:

android:orientation="vertical"

Как это сделать в коде, без XML?

Ответы:


188

Вы не можете изменить LinearLayoutориентацию, используя его LayoutParams. Это можно сделать только с LinearLayoutпредметом.

LinearLayout layout = /* ... */;
layout.setOrientation(LinearLayout.VERTICAL);

9

Вы можете использовать вот так:

LinearLayout myll = (LinearLayout) findViewById(R.id.yourLinearLayout);
myll.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));
myll.setOrientation(LinearLayout.VERTICAL);

4
вторая строка должна бытьmyLayout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
otaku

4

Вам нужно создать экземпляр LinearLayout. После этого вы можете вызвать setOrientation ()

LinearLayout myLayout = ...;
myLayout.setLayoutParams(new LayoutParams(LinearLayout.WRAP_CONTENT, LinearLayout.WRAP_CONTENT);
myLayout.setOrientation(LinearLayout.VERTICAL);

Это должно сработать :)

Для получения дополнительной информации проверьте Android API .


2

Рабочий пример ниже (это LayoutParams.WRAP_CONTENT, НЕ LinearLayout.WRAP_CONTENT)

myLayout.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
myLayout.setLayoutParams(layoutParams);

2

Если сюда прибудет кто-то другой, как я, ищущий ответ для Xamarin, эквивалент:

LinearLayout layout = /* ... */;
layout.Orientation = Orientation.Vertical;
layout.LayoutParameters = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MatchParent, LinearLayout.LayoutParams.WrapContent);

-6

Просто используйте следующее: -

LinearLayout mlayout = new LinearLayout(context);
mlayout.setOrientation(2);

2 означает Vertical, что 1 используется для horizontal.


1
Почему вы вернулись через 4 года после того, как ответ был принят, и дали худший ответ? Вы не должны использовать «2». Вы должны использовать статические значения, определенные в LinearLayout, например LinearLayout.Vertical.
Stealth Rabbi

Потому что я хотел знать, прав я или нет. :) Теперь я узнал, что лучше использовать статические значения, определенные в linearLayout. :-)
Yama Raahi 06

Тогда почему бы просто не посмотреть на правильный ответ? Stack Overflow не следует использовать для того, чтобы высказывать свои предположения в качестве ОТВЕТОВ. Если вы не знаете, как правильно ответить на вопрос, то не пишите ответ. Теперь, когда кто-то заходит на эту страницу, он должен знать, чтобы игнорировать ваш неправильный ответ и искать ответы получше. Вот почему вам отказывают.
Stealth Rabbi

Я просто хотел помочь своему другу, в моем случае это сработало, и я прокомментировал его. Кстати, если неправильно использовать 2 и 1, то какого черта они существуют.?
Яма Раахи 08

Он существует, потому что это необработанное значение, прикрепленное к статическим константам, определенным в LinearLayout, как указал @StealthRabbi. Однако вы никогда не должны использовать эти значения.
Даниэль Молина
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.