Проблемы с выравниванием с помощью двухстрочной кнопки

Я пытаюсь понять, почему двухстрочная кнопка в моем приложении смещается на пару пикселей ниже, чем другие кнопки:

Диалоговое окно ошибки. Сообщение об ошибке: «Ошибка: нет подключения к Интернету. Проверьте настройки подключения и повторите попытку». Под сообщением об ошибке есть три кнопки: Повторить, Отменить и Настройки сети. Кнопка «Настройка сети» на несколько пикселей ниже, чем другие кнопки.

Этого не происходит, если я сокращаю текст на третьей кнопке до тех пор, пока он не встанет на одну строку, что говорит мне, что это имеет какое-то отношение к разрыву строки. Добавление android:layout_gravity="top" к макету кнопки, похоже, не помогает. Любые идеи, что может вызвать это?

Изменить: Вот XML-файл макета:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal" android:padding="10dip" android:layout_width="wrap_content"> <TextView android:id="@+id/error_text" android:layout_height="wrap_content" android:layout_marginBottom="5dip" android:text="Place holder" android:layout_width="wrap_content" android:textSize="17dip"/> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_horizontal" android:padding="10dip" android:layout_width="wrap_content"> <Button android:id="@+id/ok_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/ok" android:textColor="@color/black" android:textStyle="bold"/> <Button android:id="@+id/cancel_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="8dip" android:text="@string/cancel_login" android:textColor="@color/black" android:textStyle="bold" android:visibility="gone"/> <Button android:id="@+id/third_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="8dip" android:textColor="@color/black" android:textStyle="bold" android:visibility="gone"/> </LinearLayout> </LinearLayout> 

Solutions Collecting From Web of "Проблемы с выравниванием с помощью двухстрочной кнопки"

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

Чтобы отключить это поведение, установите android:baselineAligned="false" в LinearLayout .

Посмотрев на ваш макет (на устройстве), я не уверен, почему он проявляет это странное поведение. При отладке макетов мне нравится накладывать цвета фона на «Виды», чтобы вы могли более четко видеть пространство, которое они занимают. Если мы удалим все дополнения, мы увидим, что кнопки просто не сидят на одной верхней строке. Если мы применим android:gravity="center_vertical" к содержащему LinearLayout мы видим, что первые две кнопки центрированы, но последний сидит плотно с верхним краем.

Одним из решений этого является просто переписать внутренний контейнер с помощью RelativeLayout :

 <RelativeLayout android:layout_height="wrap_content" android:padding="10dip" android:layout_width="wrap_content"> <Button android:id="@+id/ok_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/ok" android:textColor="@color/black" android:textStyle="bold"/> <Button android:id="@+id/cancel_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="8dip" android:layout_toRightOf="@id/ok_button" android:text="@string/cancel_login" android:textColor="@color/black" android:textStyle="bold" android:visibility="gone"/> <Button android:id="@+id/third_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="8dip" android:layout_toRightOf="@id/cancel_button" android:textColor="@color/black" android:textStyle="bold" android:visibility="gone"/> </RelativeLayout> 

Из моего тестирования, используя RelativeLayout вы можете заставить все кнопки сидеть на одном верхнем краю.

Я добавлю следующие строки к вашей третьей кнопке в XML и сделаю ее высотой до «fill_parent»:

 android:paddingTop="4dp" android:layout_height="fill_parent" 

Для меня 4dp работал нормально, вы можете проверить, нужно ли вам больше или меньше.

Внесите эти изменения, и ваша кнопка будет в порядке, как и ее стипендиаты 🙂

Я запустил ваш код со следующим изменением, и он отлично работал: измените андроид: гравитация в горизонтальном линейном макете от «center_horizontal» до «center».

Написать андроид: layout_height = "fill_parent" для всех трех кнопок