Форма макета с длинными метками

У меня возникли некоторые трудности с проблемой макета Android. Я пытаюсь сделать форму для заполнения пользователями. Эта форма определяется программно (из предоставленной сервером конфигурации, которую я не могу контролировать), и поэтому я должен реализовать ее программно. Форма имеет несколько различных типов полей, но для простоты мы можем предположить, что все они являются простыми текстовыми полями (EditText).

В настоящее время у меня есть форма, реализованная как вертикальный LinearLayout. Для каждого поля у меня есть горизонтальный LinearLayout, который содержит TextView для метки поля и EditText для пользователя, чтобы ввести значение для поля. У меня есть EditText для заполнения ширины с помощью LinearLayout.LayoutParams(FILL_PARENT, WRAP_CONTENT).

Это хорошо работает, когда метка TextView короткая, но когда она длинная, EditText становится очень маленьким, и пользователю сложно ввести значение. В идеале я хотел бы, чтобы EditText был не менее половины ширины экрана с оберткой метки TextView, если это необходимо. Я пробовал TableLayout с TableRows, но у меня все еще были трудности. Я также предпочел бы не навязывать сетку и, таким образом, тратить место на строки с короткими метками (при условии, что другие требования выполнены, я гибкий в этом). Я бы попробовал что-то вроде FlowLayout, чтобы заставить EditText переноситься на следующую строку, но это не поддерживается на Android.

Любые предложения о том, как я могу сделать эту работу лучше? Решения на основе XML будут приняты, если я смогу перенести их на программный подход. Я также хотел бы сделать это как можно более гибким в отношении размера экрана и ориентации, поэтому это означает отсутствие жесткого кодирования любой ширины.

Заранее спасибо.


person Adam L.    schedule 11.01.2011    source источник
comment
Пробовали ли вы играться с весами макета? Вы должны иметь возможность указать своим двум элементам, чтобы каждый из них занимал половину экрана, например, установив ширину = 0 и layout_weight = 1 для обоих.   -  person Cheryl Simon    schedule 11.01.2011
comment
Я пытался возиться с весами, но я не знал о трюке с шириной = 0. Я возился только с fill/match_parent и wrap_content. Это не позволяет EditText занимать дополнительное пространство короткой меткой, но для моих целей этого достаточно. Спасибо!   -  person Adam L.    schedule 11.01.2011


Ответы (1)


Попробуйте поиграться с весом макета. Вы должны иметь возможность указать своим двум элементам, чтобы каждый из них занимал половину экрана, например, установив ширину = 0 и layout_weight = 1 для обоих.

person Cheryl Simon    schedule 11.01.2011
comment
Спасибо за помощь! В итоге я использовал width=0 и веса 2 и 3 для метки и поля соответственно. Я использовал эти веса как компромисс, так как этот подход оставляет пустое место, когда у меня есть короткие метки. - person Adam L.; 11.01.2011