Как реализовать новый материал BottomAppBar как BottomNavigationView - PullRequest
0 голосов
/ 08 декабря 2018

Я пытался реализовать новый BottomAppBar, который обычно выглядит следующим образом: материал BottomAppBar как BottomNavigationView, как в домашнем приложении Google, который выглядит как this .

Моя проблема в том, что, поскольку я могу заполнить BottomAppBar только ресурсом меню, я не могу понять, как выровнять мои кнопки, чтобы они выглядели как BottomNavigationView (но с «вырезанным» для кнопки Fab) вместо того, чтобы выровнять все по одномусторона BottomAppBar.

Как добавить пользовательский макет внутри этого нового материала BottomAppBar?

Или вместо этого есть какой-либо способ реализовать BottomNavigationView с "вырезкой" для Fabкнопка (сохраняя классные анимации по умолчанию, такие как новый BottomAppBar)?

Ответы [ 3 ]

0 голосов
/ 08 декабря 2018

решено

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

Используя ?attr/selectableItemBackgroundBorderless, я также могу добиться эффекта, действительно похожего на BottomNavigationView.

<com.google.android.material.bottomappbar.BottomAppBar
    android:id="@+id/bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:gravity="center"
    app:layout_anchorGravity="start"
    app:hideOnScroll="true"
    app:fabAnimationMode="scale"
    app:fabAlignmentMode="center"
    app:backgroundTint="@color/colorPrimary">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:weightSum="5"
        android:paddingEnd="16dp">
        <ImageButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:srcCompat="@drawable/ic_home_white_24dp"
            android:background="?attr/selectableItemBackgroundBorderless"
            android:tint="@color/secondary_text"/>
        <ImageButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:srcCompat="@drawable/ic_map_black_24dp"
            android:background="?attr/selectableItemBackgroundBorderless"/>
        <ImageButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@android:color/transparent"/>
        <ImageButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:srcCompat="@drawable/ic_people_white_24dp"
            android:background="?attr/selectableItemBackgroundBorderless"/>
        <ImageButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:srcCompat="@drawable/ic_account_circle_24dp"
            android:background="?attr/selectableItemBackgroundBorderless"/>
    </LinearLayout>
</com.google.android.material.bottomappbar.BottomAppBar>
0 голосов
/ 08 февраля 2019

Поместите bottomAppBar под bottomNavigationView с прозрачным фоном.И добавьте пустой элемент меню в menu.xml, чтобы освободить место для FAB.

XML:

<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/lt_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:fitsSystemWindows="false">


<ViewPager
    android:id="@+id/main_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="56dp"
    android:layout_above="@+id/bottom_navigation"
    android:layout_alignParentStart="true" />


<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:labelVisibilityMode="labeled"
    android:layout_gravity="bottom"
    android:layout_alignParentBottom="true"
    android:background="@color/transparent"
    app:menu="@menu/bottom_menu" />

<com.google.android.material.bottomappbar.BottomAppBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/bottom_bar"
    android:layout_gravity="bottom"/>

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_anchor="@id/bottom_bar"/>

Результат

0 голосов
/ 08 декабря 2018

1 - Включите Maven в свой репозиторий в build.gradle

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

2 - Поместите зависимость компонентов материала в свой build.gradle. Имейте в виду, чтоверсия материала регулярно обновляется.

implementation 'com.google.android.material:material:1.0.0-alpha1'

3 - Установите для compileSdkVersion и targetSdkVersion последнюю версию API для Android P, значение которой равно 28.

4- Убедитесь, что ваше приложение наследует тему Theme.MaterialComponents, чтобы BottomAppBar использовал последний стиль.В качестве альтернативы вы можете объявить стиль для BottomAppBar в объявлении виджета в файле макета XML следующим образом.

style=”@style/Widget.MaterialComponents.BottomAppBar”

5 - Вы можете включить BottomAppBar в свой макет следующим образом.BottomAppBar должен быть дочерним по отношению к CoordinatorLayout.

<com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/bottom_app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:backgroundTint="@color/colorPrimary"
app:fabAlignmentMode="center"
app:fabAttached="true"
app:navigationIcon="@drawable/baseline_menu_white_24"/>

Fab in bottomnavbar

6 - Вы можете привязать кнопку плавающего действия (FAB)в BottomAppBar, указав идентификатор BottomAppBar в приложении: атрибут layout_anchor FAB.BottomAppBar может удерживать FAB с заданным фоном или FAB может перекрывать BottomAppBar.

<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/baseline_add_white_24"
app:layout_anchor="@id/bottom_app_bar" />

7 - Существует множество атрибутов, которые можно использовать для настройки нижней навигационной панели и значка Fab.

Atributes

8 - Проверьте этот средний пост для более полного объяснения.


ОБНОВЛЕНИЕ: Проверьте OP-ответ для окончательного решения его конкретной проблемы.

...