Spinner плавает вниз, когда выровнен по горизонтали - PullRequest
7 голосов
/ 21 декабря 2011

Если я добавлю счетчик в горизонтальном LinearLayout или в строке таблицы, например, так:

   <LinearLayout
        android:id="@+id/linearLayout3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/editText1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" >
        </EditText>

        <Spinner
            android:id="@+id/spinner1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
    </LinearLayout>

Спиннер плавает вниз. Он плавает вниз на Android 2.2, Android 2.3 и Android 3.2, но он хорошо работает в Android 4.0, они исправили это. Но есть ли способ привести его в соответствие с другими представлениями, такими как EditText на Android 2.3.

Под плаванием я имею в виду:

***********************
* if EditText is here *  ************************
***********************  * Spinner will be here *
                         ************************

Ответы [ 7 ]

3 голосов
/ 27 июня 2014

Spinner меньше, чем EditText, поэтому для выравнивания обоих можно добавить android: layout_height = "match_parent" в Spinner и сохранить LinearLayout и EditText с wrap_content.

3 голосов
/ 05 июня 2012

Старый пост, но может помочь:

установка baselineAligned в значение true не требуется, так как это значение по умолчанию (объясняется здесь: http://developer.android.com/reference/android/widget/LinearLayout.html#attr_android:baselinealigned)

Я исправил это, жестко задав высоту как textview, так и spinner, и установив baselineAligned в FALSE.

2 голосов
/ 28 сентября 2016

Я сталкивался с той же проблемой и раньше, и после попытки и изменения моего xml я понял ответ, вот мой код xml:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/linearlayout1"
    android:orientation="horizontal"
    android:gravity="bottom">

<android.support.design.widget.TextInputLayout
    android:id="@+id/text_input_layout"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="50">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:textSize="20dp"
        android:hint="Duration"
        android:layout_gravity="left"
        android:gravity="center"
        />
</android.support.design.widget.TextInputLayout>
<Spinner
    android:id="@+id/spinner"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    android:layout_weight="50"
    />

Просто установите gravity изваш LinearLayout до bottom и решит вашу проблему.

1 голос
/ 27 марта 2014

Вы должны добавить в текст редактирования следующее:

android:layout_gravity="center_vertical"
0 голосов
/ 31 мая 2016

Я нашел следующее решение:

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"/>            
    <Spinner
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
</LinearLayout>
0 голосов
/ 03 января 2012

Добавьте android: baselineAligned = "false" в LinearLayout для просмотра изображений.Это работает в моем проекте:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:baselineAligned="false"
    android:orientation="horizontal" >

    <EditText
        android:id="@+id/text"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />
</LinearLayout>
0 голосов
/ 21 декабря 2011

В линейном расположении ориентация «горизонтальная».Значимые элементы размещены рядом.Однако ваш EditText и Spinner имеют android: layout_width = "fill_parent".Таким образом, вы хотите разместить свой EditText & Spinner рядом, но вы также хотите, чтобы они заполнили fill_parent ...

Что бы вы сделали, если бы вы получили эти противоречивые условия ??

Очевидно, что это противоречие, и разные версии Android дают разные приоритеты этим атрибутам.

Я бы предложил изменить атрибуты EditText и Spinner на:

<EditText
    ...
    android:layout_width="0dp"
    ... />
<Spinner
    ...
    android:layout_width="0dp"
    ... />

И добавить это в свой LinearLayout:

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