Android bundnavigation med udskåret design

Det er det, vi vil skabe, så begin den sjove del trin for trin.

Trin 1: Implementere materialedesignbibliotek
I materialedesign er der en nederste app-bjælke, så vi bruger det til at opfylde vores krav.

læg dette i construct.gradle (: app)

implementation 'com.google.android.materials:materials:1.1.Zero-beta01'

Trin 2: Opret en menu

Opret menufil til brug i BottomNavigationView

<?xml model="1.Zero" encoding="utf-Eight"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <merchandise
        android:id="@+id/action_home"
        android:title="Dwelling"
        android:icon="@drawable/ic_home_black_24dp"
        />
    <merchandise
        android:id="@+id/action_invisible"
        android:title=""
        android:enabled="false"/>
    <merchandise
        android:id="@+id/action_chat"
        android:title="Chat"
        android:icon="@drawable/ic_chat_black_24dp"
        />
</menu>

her tager jeg three menupunkter og indstiller ingen titel og ikon til andet punkt, fordi vi vil vise udskåret i midten.

Trin three: Opret visning

<?xml model="1.Zero" encoding="utf-Eight"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"
    android:fitsSystemWindows="true">
    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="dad or mum"
        app:layout_constraintTop_toTopOf="dad or mum" />
    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:id="@+id/cordinatorBottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="dad or mum">
        <com.google.android.materials.bottomappbar.BottomAppBar
            android:id="@+id/bottom_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="backside"
            android:layout_marginTop="60dp"
            android:paddingBottom="0dp"
            android:theme="@fashion/Theme.MaterialComponents.Mild"
            app:contentInsetStart="0dp"
            app:contentInsetStartWithNavigation="0dp"
            app:fabAlignmentMode="heart"
            app:fabCradleMargin="10dp"
            app:fabCradleRoundedCornerRadius="25dp"
            app:fabCradleVerticalOffset="0dp">
            <com.google.android.materials.bottomnavigation.BottomNavigationView
                android:id="@+id/nav_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="0dp"
                android:layout_marginEnd="0dp"
                android:background="@android:coloration/clear"
                app:labelVisibilityMode="chosen"
                app:layout_constraintBottom_toBottomOf="dad or mum"
                app:layout_constraintLeft_toLeftOf="dad or mum"
                app:layout_constraintRight_toRightOf="dad or mum"
                app:menu="@menu/menu_bottom" />
        </com.google.android.materials.bottomappbar.BottomAppBar>
        <com.google.android.materials.floatingactionbutton.FloatingActionButton
            android:id="@+id/btnAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="https://techpaliyal.com/android-bottom-navigation-with-cut-out-design/@drawable/ic_add_black_24dp"
            app:layout_anchor="@id/bottom_bar" />
    </androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

her brugte vi koordinatorlayout som rodvisning for den nederste applinje inde BundAppBar vi indsatte BottomNavigationView.

Nu er den bedste del, hvordan det viser udskæringen, ingen grund til at bekymre sig om Android tage sig af det, naked læg en flydende handlingsknap inde i koordinatorens structure og tilføj et anker til BundAppBar, og det går automatisk i centrum med et udskæring af designet.

Her er vores resultat

males der er et downside med skygge, det ser ikke godt ud, der er en gennemgang af det, opret en gennemsigtig tegning og brug den som baggrund i stedet for gennemsigtig farve.

Trin four: Tilføj gennemsigtigt tegnet

baggrund_transparent.xml

<?xml model="1.Zero" encoding="utf-Eight"?>
<form android:form="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">
    <stable android:coloration="@android:coloration/clear"/>
</form>

Trin 5: Sæt ovenstående oprettede tegning til BottomNavigationView som baggrund.

her ser vores endelige kode ud:

<?xml model="1.Zero" encoding="utf-Eight"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"
    android:fitsSystemWindows="true">
    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="dad or mum"
        app:layout_constraintTop_toTopOf="dad or mum" />
    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:id="@+id/cordinatorBottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="dad or mum">
        <com.google.android.materials.bottomappbar.BottomAppBar
            android:id="@+id/bottom_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="backside"
            android:layout_marginTop="60dp"
            android:paddingBottom="0dp"
            android:theme="@fashion/Theme.MaterialComponents.Mild"
            app:contentInsetStart="0dp"
            app:contentInsetStartWithNavigation="0dp"
            app:fabAlignmentMode="heart"
            app:fabCradleMargin="10dp"
            app:fabCradleRoundedCornerRadius="25dp"
            app:fabCradleVerticalOffset="0dp">
            <com.google.android.materials.bottomnavigation.BottomNavigationView
                android:id="@+id/nav_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="0dp"
                android:layout_marginEnd="0dp"
                android:background="@drawable/background_transparent"
                app:labelVisibilityMode="chosen"
                app:layout_constraintBottom_toBottomOf="dad or mum"
                app:layout_constraintLeft_toLeftOf="dad or mum"
                app:layout_constraintRight_toRightOf="dad or mum"
                app:menu="@menu/menu_bottom" />
        </com.google.android.materials.bottomappbar.BottomAppBar>
        <com.google.android.materials.floatingactionbutton.FloatingActionButton
            android:id="@+id/btnAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="https://techpaliyal.com/android-bottom-navigation-with-cut-out-design/@drawable/ic_add_black_24dp"
            app:layout_anchor="@id/bottom_bar" />
    </androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

Det er alt, håber du kan lide det.

Du kan tjekke den fulde projektkode på Github