LinearLayout Показать расположение

114
11

Мне нужно расположить 4 FloatingActionButton равномерно, горизонтально.

Прочитав много ответов на SO, выясняется, что лучший способ сделать это - иметь их в LinearLayout с layout_width из 0dp и всех кнопок с layout_weight из 1. После многих попыток layout_width из 0dp никогда не работал.

Вот что я сделал:

     <android.support.v7.widget.CardView
:
: >
<RelativeLayout
:
: >
<LinearLayout
android:id="@+id/toolbarBack"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/rlDetailLayoutBack"
android:layout_marginTop="4dp"
android:layout_centerHorizontal="true"
android:gravity="center"
android:weightSum="4">

<android.support.design.widget.FloatingActionButton
android:id="@+id/fabDirections"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/directions1"
android:borderWidth="0dp"
android:elevation="8dp"
android:layout_weight="1"/>

<android.support.design.widget.FloatingActionButton
android:id="@+id/fabCallMobile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/mobile"
android:borderWidth="0dp"
android:elevation="0dp"
android:layout_weight="1"/>

<android.support.design.widget.FloatingActionButton
android:id="@+id/fabCallLandline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/landline"
android:borderWidth="0dp"
android:elevation="0dp"
android:layout_weight="1"/>

<android.support.design.widget.FloatingActionButton
android:id="@+id/fabWebsite"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/website1"
android:borderWidth="0dp"
android:elevation="0dp"
android:layout_weight="1"/>

</LinearLayout>
:
:
</RelativeLayout>
</android.support.v7.widgetCardView>

Отрисовка в Android Studio (v1.5.1) с API 21 (Android 5.0.1) выглядит так:

enter image description here

... и с API 17 (Android 4.2.2), это так (изображения в FAB отображаются правильно на физическом устройстве, так что это не проблема):

enter image description here

Мои вопросы:

    Почему кнопки неравномерно расположены в API 21? Как может быть достигнуто даже распределение (по сути, общая согласованность) независимо от API? Как избавиться от уродливых линий, граничащих с кнопками API 21?

Спасибо заранее!

Предоставлено ответ ниже от Нолл J, это то, как макет выглядит на API 21, и работает, а также по API 17.

enter image description here

спросил(а) 2021-01-19T14:33:57+03:00 2 месяца, 3 недели назад
1
Решение
62

Что происходит, вы видите, как возвышение применяется к FAB на pre-lollipop.

Короче говоря, все FAB на уровнях API до v21 имеют 16dp дополнение, где FABS на v21+ имеет 0dp дополнение. Это встроено для поддержки предварительного леоптипа.


Вы должны добавить 16dp дополнение влево/вправо в стилях v21 и применить это как дополнение к вашим FAB.

ответил(а) 2021-01-19T14:33:57+03:00 2 месяца, 3 недели назад
44

- "Как можно обеспечить равномерное распространение независимо от API".

Я воссоздал ваш LinearLayout таким образом, что четыре горизонтальных столбца расположены рядом с другими, используя layout_weight

<LinearLayout
android:id="@+id/toolbarBack"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/rlDetailLayoutBack"
android:layout_marginTop="4dp"
android:layout_centerHorizontal="true"
android:orientation="horizontal"
android:weightSum="4">

<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="8dp"
android:gravity="center|center_horizontal"
android:orientation="vertical">

<android.support.design.widget.FloatingActionButton
android:id="@+id/fabDirections"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/direction1"
android:borderWidth="0dp"
android:elevation="8dp"/>

</LinearLayout>

<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="8dp"
android:gravity="center|center_horizontal"
android:orientation="vertical">

<android.support.design.widget.FloatingActionButton
android:id="@+id/fabCallMobile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/mobile"
android:borderWidth="0dp"
android:elevation="0dp"/>

</LinearLayout>

<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="8dp"
android:gravity="center|center_horizontal"
android:orientation="vertical">

<android.support.design.widget.FloatingActionButton
android:id="@+id/fabCallLandline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/landline"
android:borderWidth="0dp"
android:elevation="0dp"/>

</LinearLayout>

<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center|center_horizontal"
android:padding="8dp"
android:orientation="vertical">

<android.support.design.widget.FloatingActionButton
android:id="@+id/fabWebsite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/website1"
android:borderWidth="0dp"
android:elevation="0dp"/>

</LinearLayout>

Другие вопросы см. В решении @Charles Durham

ответил(а) 2021-01-19T14:33:57+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема