Странная визуальная проблема при создании кнопок Android одинаковой ширины - PullRequest
2 голосов
/ 31 января 2012

У меня есть кнопка «Назад» и «Домой», которые я пытаюсь выровнять по верхнему правому краю экрана. Мне бы хотелось, чтобы обе кнопки были одинакового размера, но все равно wrap_content, чтобы они не занимали дополнительное пространство. Следующая раскладка почти работает, за исключением того, что кнопка «Домой» немного запуталась, и она немного меньше, чем кнопка «Назад».

У кого-нибудь есть идеи, как это исправить?

Если я изменю второй LinearLayout на fill_parent, кнопки станут одинаковыми по ширине и идеально выровнены, но они занимают слишком много места и становятся очень широкими.

Скриншот:

http://dl.dropbox.com/u/24225416/Images/back_home_buttons.jpg

Код:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:orientation="horizontal">

                <Button
                    android:id="@+id/home"
                    android:layout_width="0dip"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"                        
                    android:text="Home" />

                <Button
                    android:id="@+id/back"
                    android:layout_width="0dip"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Back" />

        </LinearLayout>                       

    </RelativeLayout>

</LinearLayout>

Спасибо!

Ответы [ 2 ]

3 голосов
/ 31 января 2012

Это происходит из-за того, что выбранной вами ширины недостаточно для размещения текста первой кнопки. Затем текст переносится на две строки. Это, в свою очередь, заставляет механизм выравнивания базовой линии по умолчанию сдвигать первую кнопку вниз. Чтобы достичь желаемого, добавьте атрибут measureWithLargestChild в LinearLayout:

    <LinearLayout
        android:measureWithLargestChild="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:orientation="horizontal">

            <Button
                android:id="@+id/home"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1"                        
                android:text="Home" />

            <Button
                android:id="@+id/back"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Back" />

    </LinearLayout>   
1 голос
/ 24 апреля 2013

У меня была такая же проблема.Причина этого в том, что значение по умолчанию baselineAligned равно true, поэтому кнопка перемещается вниз, чтобы текст находился в одной базовой строке.Установка значения на LinearLayout на false устраняет проблему.Попробуйте добавить этот атрибут к вашему LinearLayout:

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