Coder Social home page Coder Social logo

patilshreyas / materialnavigationview-android Goto Github PK

View Code? Open in Web Editor NEW
201.0 201.0 28.0 827 KB

๐Ÿ“ฑ Android Library to implement Rich, Beautiful, Stylish ๐Ÿ˜ Material Navigation View for your project with Material Design Guidelines. Easy to use.

License: GNU General Public License v3.0

Kotlin 100.00%
android android-design android-library kotlin kotlin-android material-components material-design material-theme material-ui navigation-drawer navigationview

materialnavigationview-android's Introduction

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 :)

materialnavigationview-android's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

materialnavigationview-android's Issues

OnClick open activity

i've already clone this repo and open it on android studio, works well
but if i want to use activity instead of fragment when onclick navigation item, how to do that ?

Thank's

Do something when Navigation View Item is touched

I'm using this library on my project. I have some options on my sidebar menu and I don't want to display the screen inside fragment, I want to start a new activity. How can I start a new activity when some item is touched?

FAILURE: Build completed with 7 failures.

Write information about Bug/Feature Request here
FAILURE: Build completed with 7 failures.

1: Task failed with an exception.

  • What went wrong:
    Execution failed for task ':app:mergeDebugResources'.

Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
Could not find com.shreyaspatil:MaterialNavigationView:1.2.
Searched in the following locations:
- https://dl.google.com/dl/android/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://jitpack.io/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://repo.maven.apache.org/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
Required by:
project :app

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    ==============================================================================

2: Task failed with an exception.

  • What went wrong:
    Execution failed for task ':app:processDebugMainManifest'.

Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
Could not find com.shreyaspatil:MaterialNavigationView:1.2.
Searched in the following locations:
- https://dl.google.com/dl/android/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://jitpack.io/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://repo.maven.apache.org/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
Required by:
project :app

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    ==============================================================================

3: Task failed with an exception.

  • What went wrong:
    Execution failed for task ':app:checkDebugAarMetadata'.

Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
Could not find com.shreyaspatil:MaterialNavigationView:1.2.
Searched in the following locations:
- https://dl.google.com/dl/android/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://jitpack.io/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://repo.maven.apache.org/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
Required by:
project :app

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    ==============================================================================

4: Task failed with an exception.

  • What went wrong:
    Execution failed for task ':app:mergeDebugAssets'.

Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
Could not find com.shreyaspatil:MaterialNavigationView:1.2.
Searched in the following locations:
- https://dl.google.com/dl/android/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://jitpack.io/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://repo.maven.apache.org/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
Required by:
project :app

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    ==============================================================================

5: Task failed with an exception.

  • What went wrong:
    Execution failed for task ':app:checkDebugDuplicateClasses'.

Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
Could not find com.shreyaspatil:MaterialNavigationView:1.2.
Searched in the following locations:
- https://dl.google.com/dl/android/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://jitpack.io/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://repo.maven.apache.org/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
Required by:
project :app

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    ==============================================================================

6: Task failed with an exception.

  • What went wrong:
    Execution failed for task ':app:desugarDebugFileDependencies'.

Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
Could not find com.shreyaspatil:MaterialNavigationView:1.2.
Searched in the following locations:
- https://dl.google.com/dl/android/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://jitpack.io/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://repo.maven.apache.org/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
Required by:
project :app

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    ==============================================================================

7: Task failed with an exception.

  • What went wrong:
    Execution failed for task ':app:mergeDebugNativeLibs'.

Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
Could not find com.shreyaspatil:MaterialNavigationView:1.2.
Searched in the following locations:
- https://dl.google.com/dl/android/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://jitpack.io/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
- https://repo.maven.apache.org/maven2/com/shreyaspatil/MaterialNavigationView/1.2/MaterialNavigationView-1.2.pom
Required by:
project :app

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    ==============================================================================

  • Get more help at https://help.gradle.org

BUILD FAILED in 7s

Error inflating class

Did everything as u said to implement the MaterialNavigationView instead the default NavigationView
(Changed it both in the xml file and in the java file)
And i get this error when i run the app... any idea why?
Error inflating class com.shreyaspatil.material.navigation.MaterialNavigationView

Suggestions and implementation of New item styles

If you have good ideas or suggestions or good material design structure available for item style of MaterialNavigationView then you're at right place. You can contribute us if you have cool ideas. You are always welcome. You can open PR or simply show your design here in comments. Thank you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.