Material Design ProgressBar with consistent appearance

Overview

MaterialProgressBar

Icon

Material Design ProgressBar with consistent appearance on Android 4.0+.

Why MaterialProgressBar?

  • Consistent appearance on Android 4.0+.
  • Correct tinting across platforms.
  • Able to remove the intrinsic padding of framework ProgressBar.
  • Able to hide the progress background of framework horizontal ProgressBar.
  • Able to show a determinate circular progress.
  • Used as a drop-in replacement for framework ProgressBar.

Preview

Google Play

Sample APK

Android 4.4.4

Android 4.4.4

Samsung Android 5.0.1 (native implementation fails to tint)

Samsung Android 5.0.1

Android 6.0.1

Android 6.0.1

Integration

Gradle:

implementation 'me.zhanghai.android.materialprogressbar:library:1.6.1'

Usage

You can either simply use the MaterialProgressBar widget, or set drawables from this library on a regular ProgressBar.

Using Widget

Simply replace your ProgressBar with MaterialProgressBar, and remember to apply corresponding style and attribute for correct behavior.

For example, to create an indeterminate horizontal MaterialProgressBar:

<me.zhanghai.android.materialprogressbar.MaterialProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:indeterminate="true"
    app:mpb_progressStyle="horizontal"
    style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal" />

In order to make your ProgressBar take the correct and consistent size on all versions, you will always need to use one of the styles from this library. The trick inside it is android:minWidth, android:maxWidth (and height) that controls the drawable size.

  • Widget.MaterialProgressBar.ProgressBar
  • Widget.MaterialProgressBar.ProgressBar.Horizontal
  • And more size and no-padding variants in styles.xml

Available custom attributes:

  • app:mpb_progressStyle: Style of progress drawable: circular or horizontal. Defaults to circular.
  • app:mpb_setBothDrawables: Whether both determinate and indeterminate drawables should be set on this progress bar. Defaults to false (for performance). Should be set to true if you want to use both of the backported determinate and indeterminate drawables.
  • app:mpb_useIntrinsicPadding: Whether progress drawable should use its intrinsic padding. Defaults to true.
  • app:mpb_showProgressBackground: Whether progress drawable should show a progress background. Defaults to true for horizontal progress drawable, false otherwise.
  • app:mpb_determinateCircularProgressStyle: Style of determinate circular progress drawable: normal or dynamic. Defaults to normal.

8 tint-related attributes such as app:mpb_progressTint and app:mpb_progressTintMode are also supported so that they can control the tinting of progress drawables. The default tint color is ?colorControlActivated, and the default tint mode is src_in.

For a detailed example, you can refer to the sample app's layout, where you can find examples such as removing progress padding or background.

Using Drawable

Three Material Design drawables are backported to Android 4.0 (API 14), so you can create one and set it directly on your ProgressBar.

For example, to set a IndeterminateHorizontalProgressDrawable on a ProgressBar.

progressBar.setIndeterminateDrawable(new IndeterminateHorizontalProgressDrawable(this));

You will also need to set a style from this library as in the section above.

For example, to define an indeterminate horizontal ProgressBar.

<ProgressBar
            android:id="@+id/indeterminate_horizontal_progress"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:indeterminate="true"
            style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal" />

Don't forget to create and set the drawable as above.

You can also customize the behavior of these drawables by calling setShowBackground() and setUseIntrinsicPadding(). Tint-related methods setTint(), setTintList() and setTintMode() are also backported so that you can use them directly, but remember to take these drawables as their actual type or TintableDrawable because VM won't be able to find these methods on Drawable for legacy platforms.

If you want to support API level < 18, you'll need to workaround a canvas limitation as in here; Using MaterialProgressBar does this automatically.

For a detailed example, you can refer to the onCreate() method of the old sample's MainActivity and its layout main_activity.xml.

ProGuard

The AAR of this library has already included a ProGuard configuration file to make ObjectAnimator work properly.

Older versions

Neither Support v4 nor AppCompat v7 backported animation API to versions prior to ICS, and the NineOldAndroids library has already been deprecated since people should all be using minSdkVersion="14" now, so versions older than ICS are not supported.

License

Copyright 2015 Hai Zhang

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • Implement determinate circular progressbar

    Implement determinate circular progressbar

    This is an implementation of the determinate circular progress bar as shown here: https://storage.googleapis.com/material-design/publish/material_v_10/assets/0B14F_FSUCc01N2kzc1hlaFR5WlU/061101_Circular_Sheet_xhdpi_005.webm

    Closes #24

    Screenshots of this implementation: 1 2 3 4 5 6 7 8

    enhancement 
    opened by webmaster128 25
  • init() should be called delayed

    init() should be called delayed

    MaterialProgressBar fully initializes even though it is set to INVISIBLE or GONE. It should instead only call init() when it first becomes visible.

    I did some profiling and could improve overall time to set up a view to 20% just by removing MaterialProgressBar. I admit I used it very often, but you should still initialize lazy right before it is needed.

    enhancement question 
    opened by oliverhausler 21
  • Big indeterminate (circular) Progress Bar looks blurry

    Big indeterminate (circular) Progress Bar looks blurry

    Not sure if this is an issue or expected behaviour of android resource management but the big indeterminate (circular) Progress Bar looks blurry on android 4.2.2 (768x1280, 320dpi).

    It may not be very noticeable in screenshot but here it is: http://i.imgur.com/LRP6jlO.png it's definitely noticeable on runtime.

    bug help wanted 
    opened by rpgdev 18
  • "java.lang.NumberFormatException: Invalid int:" on API 17

    API 17 Style: Widget.MaterialProgressBar.ProgressBar.Horizontal.NoPadding

     Caused by: java.lang.NumberFormatException: Invalid int: ".0dip"
            at java.lang.Integer.invalidInt(Integer.java:138)
            at java.lang.Integer.parse(Integer.java:375)
            at java.lang.Integer.parseInt(Integer.java:366)
            at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:123)
            at android.content.res.TypedArray.getInt(TypedArray.java:254)
            at me.zhanghai.android.materialprogressbar.MaterialProgressBar.init(MaterialProgressBar.java:74)
            at me.zhanghai.android.materialprogressbar.MaterialProgressBar.<init>(MaterialProgressBar.java:39)
    
    bug 
    opened by flaviojunior 11
  • No Indeterminate ProgressBar/Horizontal in Samsung device, Android 5.0

    No Indeterminate ProgressBar/Horizontal in Samsung device, Android 5.0

    My device is: Samsung Galaxy S5, Android 5.0.

    As you can see in below screenshot, there is native implementation of Indeterminate ProgressBar, but no one in library implementation. The same issue with ProgressBar on Toolbar.

    image

    bug 
    opened by anticafe 11
  • [Conflict] Bug when using another library (MateriaDialogs)

    [Conflict] Bug when using another library (MateriaDialogs)

    Hi,

    I'm using Material Dialogs, a library that depends on MaterialProgressBar.

    When using it, MaterialProgressBar "doesn't work": I using the Circular Progress with determinate mode, but it's always shown as indeterminate.

    Even if I exclude the dependency, It doesn't work (below some config test).

    compile 'me.zhanghai.android.materialprogressbar:library:1.4.1'
    compile('com.afollestad.material-dialogs:commons:0.9.4.4') {
        exclude group: 'me.zhanghai.android.materialprogressbar', module: 'library'
    }
    
    compile 'me.zhanghai.android.materialprogressbar:library:1.4.1'
    compile('com.afollestad.material-dialogs:commons:0.9.4.4') {
        exclude group: 'com.afollestad.material-dialogs', module: 'core'
    }
    compile('com.afollestad.material-dialogs:core:0.9.4.4') {
        exclude group: 'me.zhanghai.android.materialprogressbar', module: 'library'
    }
    

    I'm "stuck", don't know how I can fix it neither what to test / try to debug.

    If you need more informations or test, don't hesitate.

    Thanks,

    Regards

    [Edit]: issue open on MaterialDialogs: https://github.com/afollestad/material-dialogs/issues/1364

    question 
    opened by Gounlaf 10
  • Manifest merger failed!

    Manifest merger failed!

    I just started to learn Android development few weeks ago so maybe there's issue with me and not with this library. But whenever I'm trying to use it even in new project Android Studio throws out this error.

    Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory). Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-22:19 to override.

    invalid 
    opened by Tukmens 7
  • Feedback MaterialProgressBar problem

    Feedback MaterialProgressBar problem

    Hello thank you for you library, Now I want to change the MaterialProgressBar color with the code, but I did not try to succeed. Could you give an example? Thank you @DreaminginCodeZH

    opened by tcqq 7
  • setBothDrawables=true renders black background on API 19

    setBothDrawables=true renders black background on API 19

    Here is my current configuration:

    <me.zhanghai.android.materialprogressbar.MaterialProgressBar
            style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal.NoPadding"
            android:id="@+id/cardProgressBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:progress="10"
            android:secondaryProgress="20"
            android:max="100"
            app:mpb_progressStyle="horizontal"
            app:mpb_useIntrinsicPadding="false"
            app:mpb_setBothDrawables="true"
            app:mpb_showProgressBackground="true"/>
    

    On API 19, it renders as follows:

    And on API 24, it renders as expected:

    When just using either indeterminate or determinate mode, everything renders as expected. Only when mpb_setBothDrawables is true, it renders black on 19.

    opened by rdadkins 7
  • Add ability to change circular progressbar width

    Add ability to change circular progressbar width

    Hi, please add this option , I am making a button with icon in center and circular progressbar around it, and it visually looks bad when progressbar is different width than lines in icon. Afaik I can tell you scale the cancas with width, but Id like to set fixed width

    enhancement 
    opened by ursusursus 7
  • Android Studio 2.0 Preview render exception

    Android Studio 2.0 Preview render exception

    Since Android Studio 2.0, the progress bar throws an exception during rendering and blocks ALL of the views from showing in the preview (because of the exception).

    (I think it has something to do with the animation code in the progress bar.)

    java.lang.IllegalArgumentException: object is not an instance of declaring class   at java.lang.reflect.Method.invoke(Method.java:606)   at android.animation.PropertyValuesHolder_Delegate.callMethod(PropertyValuesHolder_Delegate.java:108)   at android.animation.PropertyValuesHolder_Delegate.nCallFloatMethod(PropertyValuesHolder_Delegate.java:145)   at android.animation.PropertyValuesHolder.nCallFloatMethod(PropertyValuesHolder.java:-1)   at android.animation.PropertyValuesHolder.access$400(PropertyValuesHolder.java:37)   at android.animation.PropertyValuesHolder$FloatPropertyValuesHolder.setAnimatedValue(PropertyValuesHolder.java:1296)   at android.animation.ObjectAnimator.animateValue(ObjectAnimator.java:981)   at android.animation.ValueAnimator.setCurrentFraction(ValueAnimator.java:642)   at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:589)   at android.animation.ValueAnimator.start(ValueAnimator.java:1106)   at android.animation.ValueAnimator.start(ValueAnimator.java:1117)   at android.animation.ObjectAnimator.start(ObjectAnimator.java:852)   at android.animation.AnimatorSet.start(AnimatorSet.java:586)   at me.zhanghai.android.materialprogressbar.IndeterminateProgressDrawableBase.start   ... (IndeterminateProgressDrawableBase.java:45)   at me.zhanghai.android.materialprogressbar.IndeterminateProgressDrawable.start(IndeterminateProgressDrawable.java:19)   at android.widget.ProgressBar.drawTrack(ProgressBar.java:1713)   at android.widget.ProgressBar.onDraw(ProgressBar.java:1676)   at android.view.View.draw(View.java:16178)   at android.view.View.draw(View.java:16090)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16088)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16088)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16088)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16181)   at android.support.v4.widget.NestedScrollView.draw(NestedScrollView.java:1761)   at android.view.View.draw(View.java:16090)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.support.design.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1127)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16088)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16088)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16181)

    Use the following example layout (really pretty much any layout that includes the ProgressBar will throw the exception) and view the Preview tab in Android Studio 2.0+:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    
        <me.zhanghai.android.materialprogressbar.MaterialProgressBar
            android:id="@android:id/progress"
            style="@style/Widget.MaterialProgressBar.ProgressBar.Large"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:indeterminate="false"/>
    
    </FrameLayout>
    

    Invalidating caches and restarting does not fix the problem.

    When running the code on a device or emulator, the progress bar shows correctly and animates correctly. This is only a problem when rendering the Preview. The annoying thing is that not only does it not render, but it keeps all the other views from rendering in the preview. Hiding the view with tools:visibility="gone" won't stop it from crashing the whole preview render.

    This occurs while using compile 'me.zhanghai.android.materialprogressbar:library:1.1.4'

    bug 
    opened by jon-adams 7
  • Fatal Exception: android.view.InflateException Binary XML file line #232: Error inflating class me.zhanghai.android.materialratingbar.MaterialRatingBar

    Fatal Exception: android.view.InflateException Binary XML file line #232: Error inflating class me.zhanghai.android.materialratingbar.MaterialRatingBar

    Caused by java.lang.VerifyError Verifier rejected class me.zhanghai.android.materialratingbar.ClipDrawableCompat due to bad method void me.zhanghai.android.materialratingbar.ClipDrawableCompat.setTintList(android.content.res.ColorStateList) (declaration of 'me.zhanghai.android.materialratingbar.ClipDrawableCompat' appears in /data/app/com.drdizzy-2/base.apk:classes3.dex)

    @zhanghai

    opened by SaadKhanJadoon 0
  • AndroidX

    AndroidX

    I am getting the following when running canISayByeByeJetifier.

    Scanning me.zhanghai.android.materialprogressbar:library:1.4.2
     Absoulute path: /Users/xiwei/.gradle/caches/modules-2/files-2.1/me.zhanghai.android.materialprogressbar/library/1.4.2/6bd6cd6e9107e22a5d3b4d3d3713a6864aae854e/library-1.4.2.aar
     Graphs to this dependency:
     +---com.afollestad.material-dialogs:core:0.9.5.0
         +---me.zhanghai.android.materialprogressbar:library:1.4.2
     Issues found:
     * me/zhanghai/android/materialprogressbar/Interpolators$TRIM_PATH_START.class -> android/support/v4/view/animation/PathInterpolatorCompat
     * me/zhanghai/android/materialprogressbar/BaseProgressLayerDrawable.class -> android/support/v4/graphics/ColorUtils
     * me/zhanghai/android/materialprogressbar/Interpolators$TRIM_PATH_END.class -> android/support/v4/view/animation/PathInterpolatorCompat
     * me/zhanghai/android/materialprogressbar/Interpolators$INDETERMINATE_HORIZONTAL_RECT2_TRANSLATE_X.class -> android/support/v4/view/animation/PathInterpolatorCompat
     * me/zhanghai/android/materialprogressbar/Interpolators$INDETERMINATE_HORIZONTAL_RECT1_SCALE_X.class -> android/support/v4/view/animation/PathInterpolatorCompat
     * me/zhanghai/android/materialprogressbar/MaterialProgressBar.class -> android/support/v7/widget/TintTypedArray
     * me/zhanghai/android/materialprogressbar/Interpolators$INDETERMINATE_HORIZONTAL_RECT1_TRANSLATE_X.class -> android/support/v4/view/animation/PathInterpolatorCompat
     * me/zhanghai/android/materialprogressbar/Interpolators$INDETERMINATE_HORIZONTAL_RECT2_SCALE_X.class -> android/support/v4/view/animation/PathInterpolatorCompat
     * pom -> com.android.support:appcompat-v7:27.0.0
     * pom -> com.android.support:support-annotations:27.0.0
    
    

    Would you consider update to AndroidX?

    Thanks!

    opened by GC-Xi 0
  • Support stroke width in API or have better internals to support Kotlin

    Support stroke width in API or have better internals to support Kotlin

    Currently the library does not support stroke width and you said you do not want to implement it. (#61)

    The problem is that the current code is filled with protected / private constructors and prevent expanding the library from Kotlin to implement this.

    In Java it's relatively simple to achieve, in Kotlin we need to copy and convert 90% of the code :(

    To see the issue just convert:

    package me.zhanghai.android.materialprogressbar;
    
    import android.graphics.Paint;
    
    public class SingleCircularProgressDrawable2dp extends SingleCircularProgressDrawable {
    
        SingleCircularProgressDrawable2dp(int style) {
            super(style);
            setShowBackground(false);
        }
    
        @Override
        protected void onPreparePaint(Paint paint) {
            super.onPreparePaint(paint);
            paint.setStrokeWidth(2);
        }
    }
    

    to kotlin and see all the errors about package private / protected :(

    This is not cool to have to maintain java code in a full kotlin project just for this use case :(

    opened by Tolriq 4
  • [Enhancement] Permanently spinning determinate circular progress

    [Enhancement] Permanently spinning determinate circular progress

    Hi there! Thank you for great library. It would be very nice to implement one more determinateCircularProgressStyle with always spinning ring with gap decreasing its size with progress. In current implementation animation just stops when reaching target progress, the idea is to have continuous spinning. Does it violate Material Design principles?

    enhancement 
    opened by dummyco 1
  • colorControlActivated is not the default

    colorControlActivated is not the default

    colorAccent is used instead of colorControlActivated:

    image

    Theme:

        <!-- Legend App Theme -->
        <style name="BaseTheme.Legend" parent="AppTheme">
            <!-- Attributes for all APIs -->
            <item name="colorPrimary">@color/material_red_500</item>
            <item name="colorPrimaryDark">@color/material_blue_700</item>
            <item name="colorAccent">@color/material_green_a700</item>
            <item name="colorControlActivated">@color/material_purple_500</item>
            <item name="colorControlHighlight">@color/material_lime_500</item>
            <item name="dialogTheme">@style/AppTheme.Dialog.Legend</item>
            <item name="alertDialogTheme">@style/AppTheme.Dialog.Alert.Legend</item>
        </style>
    

    Layout:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.CardView
        style="@style/CardStyle.Home"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/material_theme_progress_indicators"
                android:textAppearance="@style/TextStyle.Title"/>
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/view_spacing_medium"
                android:text="@string/material_theme_stock"
                android:textAppearance="@style/TextStyle.Body2"/>
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/view_spacing_small"
                android:gravity="center_vertical">
    
                <ProgressBar
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="@dimen/view_spacing_small"
                    android:indeterminate="true"/>
    
                <ProgressBar
                    style="@style/ProgressBarStyle.Horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="@dimen/view_spacing_small"
                    android:indeterminate="true"/>
            </LinearLayout>
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/view_spacing_medium"
                android:text="@string/material_theme_material_progress"
                android:textAppearance="@style/TextStyle.Body2"/>
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/view_spacing_small"
                android:gravity="center_vertical"
                android:theme="@style/AppTheme.Green">
    
                <me.zhanghai.android.materialprogressbar.MaterialProgressBar
                    style="@style/Widget.MaterialProgressBar.ProgressBar"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="@dimen/view_spacing_small"
                    android:indeterminate="true"/>
    
                <me.zhanghai.android.materialprogressbar.MaterialProgressBar
                    style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="@dimen/view_spacing_small"
                    app:mpb_progressStyle="horizontal"
                    android:indeterminate="true"/>
            </LinearLayout>
        </LinearLayout>
    </android.support.v7.widget.CardView>
    

    Tested on emulator API 25 and 16.

    opened by leinardi 13
Releases(v1.6.1)
Owner
Hai Zhang
Hai Zhang
Material Design RatingBar with better appearance

MaterialRatingBar Material Design RatingBar with better appearance, compatible with Android 3.0+. Why MaterialRatingBar? Consistent appearance on Andr

Hai Zhang 1.9k Dec 26, 2022
Default colors and dimens per Material Design guidelines and Android Design guidelines inside one library.

Material Design Dimens Default colors and dimens per Material Design guidelines and Android Design guidelines inside one library. Dimens Pattern: R.di

Dmitry Malkovich 1.4k Jan 3, 2023
A library to bring fully animated Material Design components to pre-Lolipop Android.

Material MaterialLibrary is an Open Source Android library that back-port Material Design components to pre-Lolipop Android. MaterialLibrary's origina

Rey Pham 6k Dec 21, 2022
Material Design icons by Google

Material design icons Material design icons is the official icon set from Google. The icons are designed under the material design guidelines. 4.0.0 U

Google 47.1k Jan 9, 2023
The flexible, easy to use, all in one drawer library for your Android project. Now brand new with material 2 design.

MaterialDrawer ... the flexible, easy to use, all in one drawer library for your Android project. What's included ?? • Setup ??️ • Migration Guide ??

Mike Penz 11.6k Dec 27, 2022
A Material Design ViewPager easy to use library

MaterialViewPager Material Design ViewPager easy to use library Sample And have a look on a sample Youtube Video : Youtube Link Download In your modul

Florent CHAMPIGNY 8.2k Jan 1, 2023
Floating Action Button for Android based on Material Design specification

FloatingActionButton Yet another library for drawing Material Design promoted actions. Features Support for normal 56dp and mini 40dp buttons. Customi

Zendesk 6.4k Dec 26, 2022
EditText in Material Design

MaterialEditText NOTE: 2.0 is NOT BACKWARDS COMPATIBLE! See more on wiki or 中文看这里 AppCompat v21 makes it easy to use Material Design EditText in our a

Kai Zhu 6.1k Dec 30, 2022
Implementation of Ripple effect from Material Design for Android API 9+

RippleEffect ExpandableLayout provides an easy way to create a view called header with an expandable view. Both view are external layout to allow a ma

Robin Chutaux 4.9k Dec 30, 2022
Material Design implementation for Android 4.0+. Shadows, ripples, vectors, fonts, animations, widgets, rounded corners and more.

Carbon Material Design implementation for Android 4.0 and newer. This is not the exact copy of the Lollipop's API and features. It's a custom implemen

null 3k Jan 9, 2023
Navigation Drawer Activity with material design style and simplified methods

MaterialNavigationDrawer Navigation Drawer Activity with material design style and simplified methods       It requires 10+ API and android support v7

Fabio Biola 1.6k Jan 5, 2023
Android drawer icon with material design animation

LDrawer Android drawer icon with material design animation Note Basically same as appcompat_v7 version 21, you can use appcompat_v7 compile 'com.andro

Hasan Keklik 1.4k Dec 25, 2022
Custom Tabs with Material Design effects

MaterialTabs Custom Tabs with Material Design animations for pre-Lollipop devices       Download example apk It requires 14+ API and android support v

Fabio Biola 1.4k Dec 29, 2022
[] Android Library that implements Snackbars from Google's Material Design documentation.

DEPRECATED This lib is deprecated in favor of Google's Design Support Library which includes a Snackbar and is no longer being developed. Thanks for a

null 1.5k Dec 16, 2022
Android Sample Project with Material Design and Toolbar.

AndroidMaterialDesignToolbar -- PROJECT IS NOT SUPPORTED Android Sample Project with Material Design and Toolbar. Project use Appcompat library for ma

kemal selim tekinarslan 713 Nov 11, 2022
Custom drawer implementation for Material design apps.

material-drawer Custom drawer implementation for Material design apps. Demo A demo app is available on Google Play: Screenshots Fixed items Select pro

Jan Heinrich Reimer 600 Nov 18, 2022
Android drawer icon with material design animation

LDrawer Android drawer icon with material design animation Note Basically same as appcompat_v7 version 21, you can use appcompat_v7 compile 'com.andro

Hasan Keklik 1.4k Dec 25, 2022
Floating Action Button for Android based on Material Design specification

FloatingActionButton Yet another library for drawing Material Design promoted actions. Features Support for normal 56dp and mini 40dp buttons. Customi

Zendesk 6.4k Jan 3, 2023
A library support form with material design, construct same with Android UI Framework

SwingUI A slight Java Swing library support form with material design, construct same with Android UI Framework writen in Kotlin Supported: 1. Screen:

Cuong V. Nguyen 3 Jul 20, 2021