Горизонтальная LinearLayout с детьми, упорядоченными справа налево? - PullRequest
3 голосов
/ 03 марта 2012

У меня есть горизонтальная LinearLayout, программно заполненная ее дочерними элементами.Я хотел бы иметь возможность переключаться на макет справа налево (то есть дочерний 0 находится справа, дочерний 1 слева и т. Д.).Дело в том, что я хочу, чтобы макет переключался с RtL на LtR и обратно динамически, поэтому, например, этот вопрос не имеет отношения к моему случаю.

Кажется, что нет никакого способаустановить его непосредственно в коде, тем более что гравитация предназначена для выравнивания, а не упорядочения.

Пока я вижу следующие обходные пути:

  • На переключателе упорядочения-добавить дочерние элементы в обратном порядке (проблема: очень уродливая и ресурсоемкая).
  • Реализация подкласса LinearLayout с переопределенным onLayout () метод (проблема: много копий-копий исходного кода Android из-за ограниченного доступа элементов макета помощника).
  • Замените LinearLayout другимнапример, TableLayout или RelativeLayout , и измените параметры макета дочерних элементов на переключателе (проблема: все еще в некотором роде).

Любые более прямые решения или лучший обходной путьs?

РЕДАКТИРОВАТЬ: , чтобы уточнить, я создаю детей практически один раз во время выполнения действия, и я могу сохранить их в массиве / коллекции помощников без каких-либо осложнений длякод.

Ответы [ 2 ]

3 голосов
/ 03 марта 2012

Хотя воссоздание детей может быть ресурсоемким, изменение порядка не должно быть таким уж плохим.Вы можете взять существующие представления, используя getChildAt и getChildCount, а затем вернуть их обратно, используя переопределение addView с индексом .

2 голосов
/ 29 января 2014

Сделать LinearLayout.setRotationY (180).Вам также нужно будет установить вращение Y дочерних видов линейного макета также на 180.Так, например:

private void horizontal() {
    LinearLayout layout = (LinearLayout) v.findViewById(R.id.layout);
    View childView1 = (View) v.findViewById(R.id.childView1);
    View childView2 = (View) v.findViewById(R.id.childView2);

    layout.setRotationY(180);
    childView1.setRotationY(180);
    childView2.setRotationY(180);
}

Код может быть неправильным, но вы поняли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...