LinearLayout - Вертикально не выравнивается

У меня возникла проблема с LinearLayout на Android. У меня четыре кнопки. Каждая кнопка имеет фиксированный размер, но текст может различаться по длине.

Моя проблема в том, что они не совпадают с верхней частью каждого. Видно, что они выровнены по верхней части текста внутри каждой кнопки, которые меняются в зависимости от количества строк внутри кнопки (см. Рисунок).

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
       <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent">
           <Button android:text="Line1 Line2" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button>
           <Button android:text="Line1 Line2 Line3" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button>
           <Button android:text="Line1" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button>
           <Button android:text="Line1" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button>
       </LinearLayout>

</LinearLayout>

http://i.imgur.com/0Kj8h.png

EDIT: ОТВЕТ (не могу ответить на свой вопрос):

Хорошо, я только что нашел ответ сам. Вы должны добавить android:baselineAligned="false" в LinearLayout или любой другой подобный элемент управления, который может показывать такое же поведение.

Вы также можете исправить это в дизайнере пользовательского интерфейса с помощью кнопки «Переключить базовое выравнивание».

Итак, результирующий код:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
       <LinearLayout android:baselineAligned="false" android:layout_width="match_parent" android:layout_height="match_parent">
           <Button android:text="Line1 Line2" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button>
           <Button android:text="Line1 Line2 Line3" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button>
           <Button android:text="Line1" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button>
           <Button android:text="Line1" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button>
       </LinearLayout>

</LinearLayout>

person darkzangel    schedule 27.07.2011    source источник
comment
Спасибо за подсказку об android:baselineAligned=false, это тоже решило мою проблему :-)   -  person James Goodwin    schedule 02.12.2013


Ответы (3)


лучше использовать RelativeLayout для такого типа выравнивания, поскольку концепция RelativeLayout говорит, что это «ссылка» на элемент управления

person Mohammed Azharuddin Shaikh    schedule 27.07.2011

Ну, ваш второй линейный макет - это то, что создает проблемы, я думаю, для вас, просто удалите это

person the100rabh    schedule 27.07.2011
comment
Мне нужно сохранить его, так как вокруг него будут другие вещи, такие как заголовок, но это хорошая мысль. - person darkzangel; 27.07.2011

Вы можете использовать TableLayout вместо вашего второго LinearLayout. И добавьте TableRow внутри TableLayout, а в строке добавьте четыре кнопки.

person Rasel    schedule 27.07.2011
comment
TableLayout делает то же самое, если вы помещаете все свои элементы в одну и ту же ячейку. Кроме того, как я уже сказал, я хочу остаться с LinearLayout, потому что в конечном итоге я добавлю неизвестное количество кнопок по коду. Я не знаю, что будет отображаться на этих кнопках, поэтому мне нужно сохранить простой способ отображения их в виде потока. Кроме того, он будет автоматически регулироваться при повороте экрана. - person darkzangel; 27.07.2011