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

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 .

dudeldidadum
источник
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. Однако вы никогда не должны использовать эти значения.
Даниэль Молина