Подтвердить что ты не робот

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

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

An error dialog.  The error message is "Error: No internet connection.  Please check your connection settings and try again."  There are three buttons beneath the error message: Retry, Cancel, and Network Settings.  The Network Setting button is a few pixels lower than the other buttons.

Это не происходит, если я сокращаю текст на третьей кнопке, пока он не встанет на одну строку, что говорит мне, что это имеет какое-то отношение к разрыву строки. Добавление 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>
4b9b3361

Ответ 1

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

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

Ответ 2

Взглянув на ваш макет (на устройстве), я не уверен, почему он проявляет это странное поведение. При отладке макетов мне нравится накладывать цвета фона на "Виды", чтобы вы могли более четко видеть пространство, которое они занимают. Если мы удалим все дополнения, мы увидим, что кнопки просто не сидят на одной верхней строке. Если применить 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, вы можете заставить все кнопки сидеть на одном верхнем краю.

Ответ 3

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

Ответ 4

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

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

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

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

Ответ 5

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