• This repository has been archived on 17/Jan/2023
  • Stars
    star
    199
  • Rank 189,656 (Top 4 %)
  • Language
    Kotlin
  • License
    GNU General Publi...
  • Created over 4 years ago
  • Updated 12 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

📱 Android Library to implement Rich, Beautiful, Stylish 😍 Material Navigation View for your project with Material Design Guidelines. Easy to use.

Archived ⚠️

Ideally there is no need to use this library when Material 2 and Material 3 is already there which support better design than what this library provides.

Material NavigationView for Android 📱

📱 Android Library to implement Rich, Beautiful Material Navigation View for your project with Material Design Guidelines. Easy to use.

Table of Contents:

Introduction

MaterialNavigationView library is built upon Google's Material Design library. This API will be useful to create rich, animated, beautiful Navigation View Drawer in Android app easily. It follows all Material Design Guidelines as stated here.
MaterialNavigationView class in this library is inherited from com.google.android.material.navigation.NavigationView class. Just only difference is added extra design.
So, we can use it as it is.

Requirements

  • AndroidX
  • Minimum SDK API 19
  • Theme - Material Components

Implementation

Implementation of Material Navigation View library is so easy. You can check /app directory for demo. Let's have look on basic steps of implementation. In this demo, we will populate The menu contents by a menu resource file.

Prerequisite

Gradle

In Build.gradle of app module, include these dependencies.

dependencies {

    // Material Navigation View Library
    implementation 'com.shreyaspatil:MaterialNavigationView:1.2'

    // Material Design Library
    implementation 'com.google.android.material:material:1.0.0'
}

Set up Material Theme

Setting Material Theme to app is necessary before implementing Material Navigation View library. To set it up, update styles.xml of values directory in app. colorSecondary value is important here because this color is applied to menu item of Navigation View.

<resources>
    <style name="AppTheme" parent="Theme.MaterialComponents.Light">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        
        <!-- colorSecondary will be applied to Menu item of NavigationView -->
        <item name="colorSecondary">@color/colorPrimary</item>
        ...
    </style>
</resources>

These are required prerequisites to implement Material Navigation View library.

Create Activity XML

This is most commonly used in conjunction with DrawerLayout to implement Material navigation drawers. Navigation drawers are modal elevated dialogs that come from the start/left side, used to display in-app navigation links.
NavigationView is a scrollable view that renders a menu resource (R.menu.<something>) as a vertical list. It also renders a header view above the menu.
We are creating activity_main.xml

<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <!-- Other Stuff here -->

    <com.shreyaspatil.material.navigationview.MaterialNavigationView
        android:id="@+id/nav_view"
        android:theme="@style/Widget.NavigationView.RippleEffect"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        app:itemStyle="rounded_right"
        app:menu="@menu/activity_main_drawer"/>

</androidx.drawerlayout.widget.DrawerLayout>

Available Flags

As already mentioned, this class is inherited from NavigationView. You can use all exisiting flags of that class.
New important flag here is.

  • itemStyle - Points to a style of menu item of Navigation drawer.
    There are currently 3 menu styles are defined as below
Flag Value Description Preview
default_style This flag sets design to default style to menu item of Navigation drawer.
rounded_right This flag sets design to menu item of Navigation drawer as Rounded Corners at right
rounded_rectangle This flag sets design to menu item of Navigation drawer as Rounded Rectangular Corners

Example as follows:

    <com.shreyaspatil.material.navigationview.MaterialNavigationView
        ...
        app:itemStyle="rounded_right"/>

Thus, we have successfully implemented design styles of Menu items.

Create Activity Code (Java/Kotlin)

All the programmatic way of implementation of MaterialNavigationView is same as NavigationView. Just change is the class name only.
Two methods are added in this new class as follows..

  • setItemStyle(int itemStyle) : This method sets the Item Style of Menu in MaterialNavigationView at runtime. itemStyle should be one of the following constants :
    • MaterialNavigationView.ITEM_STYLE_DEFAULT
    • MaterialNavigationView.ITEM_STYLE_ROUND_RIGHT
    • MaterialNavigationView.ITEM_STYLE_ROUND_RECTANGLE
  • getItemStyle() : It returns the value of item style of menu.

Here is a demo of MaterialNavigationView in which we will switch item style of NavigationView after selecting menu.

class MainActivity : AppCompatActivity() {
    private lateinit var navView: MaterialNavigationView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        ...
        navView = findViewById(R.id.nav_view)
        ...
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            R.id.action_default -> {
                navView.setItemStyle(MaterialNavigationView.ITEM_STYLE_DEFAULT)
            }
            R.id.action_round_rect -> {
                navView.setItemStyle(MaterialNavigationView.ITEM_STYLE_ROUND_RECTANGLE)
            }
            R.id.action_round_right -> {
                navView.setItemStyle(MaterialNavigationView.ITEM_STYLE_ROUND_RIGHT)
            }
        }
        return false
    }
}

Thus, we have implemented MaterialNavigationView.

Migrating from NavigationView

If you are already using NavigationView (com.google.android.material.navigation.NavigationView) in your project and want to switch it to MaterialNavigationView then you are done!
Do following Changes:

  • Change in layout file - Just change package of component from com.google.android.material.navigation.NavigationView to com.shreyaspatil.material.navigationview.MaterialNavigationView wherever you used it.
  • Change in Activity Code - Just change NavigationView class to MaterialNavigationView and import appropriate package.

🔥 Hurrah! you are done and successfully migrated to MaterialNavigationView. Now just run your app and see magic.

Fast Implementation

Want to use it fast? Then here it is..
In Android Studio, Right Click -> New -> Activity -> Navigation Drawer Activity and done. Then Change just package in layout file and class name in Activity code file and you're done. Run your app and see magic 🚀

Contribute

Let's develop with collaborations. We would love to have contributions by raising issues and opening PRs. Filing an issue before PR is must. If you have design/UI related idea, you can also do contributions in that. See Contributing Guidelines.

Credits

This library is built using following open-source libraries.

If you like this library, Please start this repo and share with someone who need it. You can contribute if you have any suggestions or ideas to improve it.

License

Project is published under the GPL-3.0 license. Feel free to clone and modify repo as you want, but don't forget to add reference to authors :)

More Repositories

1

Foodium

🍲Foodium is a sample food blog Android application 📱 built to demonstrate the use of Modern Android development tools - (Kotlin, Coroutines, Flow, Dagger 2/Hilt, Architecture Components, MVVM, Room, Retrofit, Moshi, Material Components).
Kotlin
2,192
star
2

NotyKT

📒 NotyKT is a complete 💎Kotlin-stack (Backend + Android) 📱 application built to demonstrate the use of Modern development tools with best practices implementation🦸.
Kotlin
1,488
star
3

MaterialDialog-Android

📱Android Library to implement animated, 😍beautiful, 🎨stylish Material Dialog in android apps easily.
Java
890
star
4

Capturable

🚀Jetpack Compose utility library for capturing Composable content and transforming it into Bitmap Image🖼️
Kotlin
596
star
5

permission-flow-android

Know about real-time state of a Android app Permissions with Kotlin Flow APIs.
Kotlin
406
star
6

EasyUpiPayment-Android

📱Android Library to implement UPI Payment integration easily in Android App 💳💸
Kotlin
318
star
7

Flutter2GoogleSheets-Demo

A Demo application📱 which stores User feedback from 💙Flutter application into Google Sheets🗎 using Google AppScript.
Dart
293
star
8

mutekt

Simplify mutating "immutable" state models (a Kotlin multiplatform library)
Kotlin
236
star
9

compose-report-to-html

A utility (Gradle Plugin + CLI) to convert Jetpack Compose compiler metrics and reports to beautified HTML page.
Kotlin
213
star
10

Foodium-KMM

📱Sample application built to demonstrate the use of Kotlin Multiplatform Mobile for developing Android and iOS applications using Jetpack Compose 🚀.
Kotlin
184
star
11

Covid19-Notifier-IN

A sample Android App which notifies about COVID19 cases in 🇮🇳India after every 1 hour.
Kotlin
146
star
12

FCM-OnDeviceNotificationScheduler

Demo implementation to Schedule FCM Notifications on Android Device using AlarmManager + WorkManager.
Kotlin
112
star
13

AndroidFastlaneCICD

📱A sample repository to demonstrate the Automate publishing🚀 app to the Google Play Store with GitHub Actions⚡+ Fastlane🏃.
Kotlin
99
star
14

LiveStream-kt

LiveStream is a simple class which makes communication easy among different modules of your application.
Kotlin
96
star
15

LiveStream-Flutter

Dart package to which makes data communication easy among different modules of your application.
Dart
74
star
16

CellLocationFind-Android

A sample android app which extracts the location of a device using the SIM card details by extracting network details.
Kotlin
65
star
17

GitKtDroid

A sample Android application📱 built with Kotlin for #30DaysOfKotlin
Kotlin
56
star
18

DataStoreExample

Jetpack DataStore is a data storage solution. It allows us to store key-value pairs (like SharedPreferences) or typed objects with protocol buffers. DataStore uses Kotlin and Coroutines + Flow to store data synchronously with consistency and transaction support 😍
Kotlin
56
star
19

FirebaseFlowExample

A sample android application which demonstrates use of Kotlin Coroutines Flow with Firebase Cloud Firestore.
Kotlin
51
star
20

PatilShreyas.github.io

My Portfolio hosted on GitHub pages.
HTML
43
star
21

FirebaseRecyclerPagination

[DEPRECATED] Android Library to implement Paging support for Realtime Database in RecyclerView.
Java
35
star
22

TikKT

⌛ A simple timer app built with super powerful Jetpack Compose for #AndroidDevChallenge
Kotlin
33
star
23

ViewModelGoodPractice

This is an example repository to demonstrate the good practices of using ViewModel and how usage of AndroidViewModel can make things worst in a codebase
Kotlin
31
star
24

AndroidGPR

Demonstration of deploying Android library to the GitHub Package Registry using GitHub Actions CI/CD
Kotlin
25
star
25

PetyKT

A pet adoption app UI built with super powerful Jetpack Compose for #AndroidDevChallenge
Kotlin
22
star
26

FirestorePagingDemo-Android

Demo app for implementation of Firestore Paging library in Android app.
Java
20
star
27

library-ci

Sample repository to demonstrate usage of GitHub Actions CI's workflow dispatch to automate publishing of a library to Maven Central
Kotlin
17
star
28

PassengerSecurity-SIH2018

This is our SIH2018 and Third Year Mini Project - Android app for Passenger to file FIR Online.
Java
14
star
29

FirebaseRecyclerUpdateQuery-Demo

🔥Example app 📱 to demonstrate change query of Firebase/Firestore in RecyclerView without changing whole adapter.
Kotlin
9
star
30

material_dialog

[IN DEVELOPMENT - NOT AVAILABLE YET] 📱Flutter package to implement animated, 😍beautiful, 🎨stylish Material Dialog in apps easily.
Dart
9
star
31

CollegePracticals

My College Practicals
C
8
star
32

EasyDatabase

Java API to easily implement JDBC-ODBC Database connection and operations.
Java
8
star
33

play-with-perfetto

Python
7
star
34

GDGPune-DevFest19-Android

Kotlin
6
star
35

ProfileWeb-Flutter

Playing with Flutter Web to create profile.
Dart
5
star
36

MyCart-CLI

A sample E-Commerce Command Line Interface app built using Kotlin!
Kotlin
5
star
37

FirebaseUI-Android

Optimized UI components for Firebase
Java
5
star
38

BasicsOfDagger-Java

A simple example to explain the Dependency Injection💉 framework - Dagger🔪
Java
5
star
39

PatilShreyas

My profile README
5
star
40

my-blog

4
star
41

Template-NodeJS-MySQL

Sample NodeJS Web app to Test MySQL Operations.
HTML
4
star
42

Blog

My blog hosted on Netlify
JavaScript
3
star
43

MyBlog

Sample blog web application using Python Django + Postgres.
CSS
3
star
44

AndroidWorkshop

Resource of Android Workshop being conducted at IT Department, DYPCOE, Pune
Java
3
star
45

AndroidLibDemo

Publish Android Library to Bintray JCenter using GitHub Actions CI
Kotlin
2
star
46

portfolio

A one-place to host your portfolio.
2
star
47

asj-android-example

This is example project for Android Study Jams workshop @ GDG Cloud Pune.
Kotlin
2
star
48

mytestsite

HTML
2
star
49

GatsbyBlog

CSS
1
star
50

netlify-functions-example

HTML
1
star
51

one-click-hugo-cms

CSS
1
star
52

ForestryBlogExample

1
star
53

empress-blog-netlify-casper-template

JavaScript
1
star
54

novela-hugo-starter

CSS
1
star
55

ScheduledActions-CITest

1
star
56

gatsby-starter-netlify-cms

JavaScript
1
star
57

novela-blog

1
star
58

gatsby-starter-minimal-blog

JavaScript
1
star
59

DummyFoodiumApi

Dummy Remote End Point API for Foodium app - https://github.com/PatilShreyas/Foodium
HTML
1
star