{"id":13577645,"url":"https://github.com/stepstone-tech/android-material-stepper","last_synced_at":"2026-01-12T08:45:39.304Z","repository":{"id":39617125,"uuid":"62123604","full_name":"stepstone-tech/android-material-stepper","owner":"stepstone-tech","description":"This library allows to use Material steppers inside Android applications.","archived":false,"fork":false,"pushed_at":"2020-01-19T17:05:47.000Z","size":47712,"stargazers_count":1781,"open_issues_count":51,"forks_count":264,"subscribers_count":54,"default_branch":"master","last_synced_at":"2025-04-05T12:33:17.906Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stepstone-tech.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-06-28T08:27:15.000Z","updated_at":"2025-03-19T07:32:24.000Z","dependencies_parsed_at":"2022-09-15T21:42:22.389Z","dependency_job_id":null,"html_url":"https://github.com/stepstone-tech/android-material-stepper","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/stepstone-tech/android-material-stepper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stepstone-tech%2Fandroid-material-stepper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stepstone-tech%2Fandroid-material-stepper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stepstone-tech%2Fandroid-material-stepper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stepstone-tech%2Fandroid-material-stepper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stepstone-tech","download_url":"https://codeload.github.com/stepstone-tech/android-material-stepper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stepstone-tech%2Fandroid-material-stepper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28337599,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T06:09:07.588Z","status":"ssl_error","status_checked_at":"2026-01-12T06:05:18.301Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T15:01:23.237Z","updated_at":"2026-01-12T08:45:39.291Z","avatar_url":"https://github.com/stepstone-tech.png","language":"Java","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src =\"./art/material-stepper-logo.png\" width=\"256\" height=\"256\"/\u003e\n\u003c/p\u003e\n\n# Android Material Stepper [![CircleCI](https://circleci.com/gh/stepstone-tech/android-material-stepper.svg?style=svg)](https://circleci.com/gh/stepstone-tech/android-material-stepper) [![codecov](https://codecov.io/gh/stepstone-tech/android-material-stepper/branch/master/graph/badge.svg)](https://codecov.io/gh/stepstone-tech/android-material-stepper) [![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-Android%20Material%20Stepper-brightgreen.svg?style=flat)](https://android-arsenal.com/details/1/5138) [![Android Weekly](https://img.shields.io/badge/Android%20Weekly-%23243-brightgreen.svg)](http://androidweekly.net/issues/issue-243)\n\nThis library allows to use Material steppers inside Android applications.\n\nQuoting the [documentation](https://www.google.com/design/spec/components/steppers.html):\n\n\u003eSteppers display progress through a sequence by breaking it up into multiple logical and numbered steps.\n\nAll of the code \u0026 features mentioned in [Getting started](#getting-started) and [Advanced usage](#advanced-usage) are showcased in the sample app.\nMoreover, you can find there other examples, e.g. how to persist state on rotation, display errors, change whether the user can go to the next step, etc. So please have a look!\n\n## Jump to section\n- [Supported steppers](#supported-steppers)\n- [Supported features](#supported-features)\n- [Getting started](#getting-started)\n- [Advanced usage](#advanced-usage)\n  - [Making extra operations before going to the next step](#making-extra-operations-before-going-to-the-next-step)\n  - [Changing button labels \u0026 compound drawables per step](#changing-button-labels--compound-drawables-per-step)\n  - [Subtitles in tabs](#subtitles-in-tabs)\n  - [Custom styling](#custom-styling)\n  - [Using same stepper styling across the application](#using-same-stepper-styling-across-the-application)\n  - [Showing a Back button on first step](#showing-a-back-button-on-first-step)\n  - [Using Views instead of Fragments as Steps](#using-views-instead-of-fragments-as-steps)\n  - [Showing an error on tabs if step verification failed](#showing-an-error-on-tabs-if-step-verification-failed)\n  - [Stepper feedback](#stepper-feedback)\n  - [Changing button text color when going to the next step should be disabled](#changing-button-text-color-when-going-to-the-next-step-should-be-disabled)\n  - [Hiding bottom navigation bar](#hiding-bottom-navigation-bar)\n- [StepperLayout attributes](#stepperlayout-attributes)\n\t- [View attributes](#view-attributes)\n\t- [StepperLayout style attributes](#stepperlayout-style-attributes)\n- [Changelog](#changelog)\n- [Espresso tests](#espresso-tests)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Supported steppers\n\n### Mobile stepper with dots \u003cbr/\u003e\n\u003cimg src =\"./gifs/dotted-progress-bar.gif\" width=\"360\" /\u003e\u0026nbsp;\u0026nbsp;\u003cimg src =\"./gifs/dotted-progress-bar-styled.gif\" width=\"360\" /\u003e\n\n### Mobile stepper with progress bar \u003cbr/\u003e\n\u003cimg src =\"./gifs/linear-progress-bar.gif\" width=\"360\" /\u003e\u0026nbsp;\u0026nbsp;\u003cimg src =\"./gifs/linear-progress-bar-styled.gif\" width=\"360\" /\u003e\n\n### Mobile stepper without a progress indicator \u003cbr/\u003e\n\u003cimg src =\"./gifs/none.gif\" width=\"360\" /\u003e\n\n### Horizontal stepper \u003cbr/\u003e\n\u003cimg src =\"./gifs/tabs.gif\" width=\"640\" /\u003e\n\u003cimg src =\"./gifs/tabs-styled.gif\" width=\"640\" /\u003e\n\n\n## Supported features\n  - color customisation of individual widgets inside of the stepper via View attributes or a style from a theme\n  - custom texts of individual widgets inside of the stepper via View attributes or a style from a theme\n  - embedding the stepper anywhere in the view hierarchy and changing the stepper type for various device configurations, e.g. phone/tablet, portrait/landscape\n  - step validation\n  - use with Fragments or Views\n  - showing errors in tabs\n  - showing stepper feedback for ongoing operations (see [Stepper feedback](https://material.io/guidelines/components/steppers.html#steppers-types-of-steppers))\n  \n## Getting started\n\n### Download (from JCenter)\n```groovy\ncompile 'com.stepstone.stepper:material-stepper:4.3.1'\n```\n\n*Note:* This library adds a transitive dependency to AppCompat `25.4.0`\nwhich is the minimum Android Support library version compatible with the Stepper library.\n\n### Create layout in XML\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003ccom.stepstone.stepper.StepperLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/stepperLayout\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    app:ms_stepperType=\"progress_bar\" /\u003e\n```\n\nFor a complete list of StepperLayout attributes see [StepperLayout attributes](#StepperLayout attributes).\n\n### Create step Fragment(s)\nStep fragments must extend [android.support.v4.app.Fragment](http://developer.android.com/reference/android/support/v4/app/Fragment.html)\nand implement `com.stepstone.stepper.Step`\n\n```java\npublic class StepFragmentSample extends Fragment implements Step {\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View v = inflater.inflate(R.layout.step, container, false);\n\n        //initialize your UI\n\n        return v;\n    }\n\n    @Override\n    public VerificationError verifyStep() {\n        //return null if the user can go to the next step, create a new VerificationError instance otherwise\n        return null;\n    }\n\n    @Override\n    public void onSelected() {\n        //update UI when selected\n    }\n\n    @Override\n    public void onError(@NonNull VerificationError error) {\n        //handle error inside of the fragment, e.g. show error on EditText\n    }\n    \n}\n```\n\n### Extend AbstractFragmentStepAdapter\nAbstractFragmentStepAdapter extends [FragmentPagerAdapter](http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html)\nbut instead of overriding the method `getItem(int)` you must override the `createStep(int)` method.\n\n```java\npublic static class MyStepperAdapter extends AbstractFragmentStepAdapter {\n\n    public MyStepperAdapter(FragmentManager fm, Context context) {\n        super(fm, context);\n    }\n\n    @Override\n    public Step createStep(int position) {\n        final StepFragmentSample step = new StepFragmentSample();\n        Bundle b = new Bundle();\n        b.putInt(CURRENT_STEP_POSITION_KEY, position);\n        step.setArguments(b);\n        return step;\n    }\n\n    @Override\n    public int getCount() {\n        return 3;\n    }\n\n    @NonNull\n    @Override\n    public StepViewModel getViewModel(@IntRange(from = 0) int position) {\n        //Override this method to set Step title for the Tabs, not necessary for other stepper types\n        return new StepViewModel.Builder(context)\n                .setTitle(R.string.tab_title) //can be a CharSequence instead\n                .create();\n    }\n}\n\n```\n\n### Set adapter in Activity\n\n```java\npublic class StepperActivity extends AppCompatActivity {\n\n    private StepperLayout mStepperLayout;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.main);\n        mStepperLayout = (StepperLayout) findViewById(R.id.stepperLayout);\n        mStepperLayout.setAdapter(new MyStepperAdapter(getSupportFragmentManager(), this));\n    }\n}\n```\n\n### Add a StepperListener in the Activity (optional)\n```java\npublic class StepperActivity extends AppCompatActivity implements StepperLayout.StepperListener {\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        //...\n        mStepperLayout.setListener(this);\n    }\n\n    @Override\n    public void onCompleted(View completeButton) {\n        Toast.makeText(this, \"onCompleted!\", Toast.LENGTH_SHORT).show();\n    }\n\n    @Override\n    public void onError(VerificationError verificationError) {\n        Toast.makeText(this, \"onError! -\u003e \" + verificationError.getErrorMessage(), Toast.LENGTH_SHORT).show();\n    }\n\n    @Override\n    public void onStepSelected(int newStepPosition) {\n        Toast.makeText(this, \"onStepSelected! -\u003e \" + newStepPosition, Toast.LENGTH_SHORT).show();\n    }\n\n    @Override\n    public void onReturn() {\n        finish();\n    }\n\n}\n```\n\n## Advanced usage\n\n### Making extra operations before going to the next step\nAfter clicking on the Next button if the user wants to e.g.:\n* save something in the database\n* make a network call on a separate Thread\n* simply save the data from the current step to some other component or parent Activity (see 'Passing data between steps' in the sample app for more details)\n\nhe can perform these operations and then invoke the `goToNextStep()` method of the `StepperLayout.OnNextClickedCallback` in the current Step.\nIf the user wants to perform these operations on the final step, when clicking on the Complete button, he needs to invoke the `complete()` method of the  `StepperLayout.OnCompleteClickedCallback`.\nWhile operations are performed, and the user would like to go back you can cancel them and then invoke `onBackClicked()` method of the `StepperLayout.OnBackClickedCallback`.\n\u003cp\u003e\u003cimg src =\"./gifs/delayed-transition.gif\" width=\"360\" /\u003e\u003c/p\u003e\n\nTo do so the fragment/view must implement `BlockingStep` instead of `Step`.\nAlso, make sure that `goToNextStep()` and/or `complete()` get called on the main thread.\n**Note:** `onNextClicked(StepperLayout.OnNextClickedCallback)` and ``onCompleteClicked(StepperLayout.OnCompleteClickedCallback)`` methods get invoked after step verification.\nE.g.:\n\n```java\npublic class DelayedTransitionStepFragmentSample extends Fragment implements BlockingStep {\n\n    //...\n\n    @Override\n    @UiThread\n    public void onNextClicked(final StepperLayout.OnNextClickedCallback callback) {\n        new Handler().postDelayed(new Runnable() {\n            @Override\n            public void run() {\n                callback.goToNextStep();\n            }\n        }, 2000L);\n    }\n\n    @Override\n    @UiThread\n    public void onCompleteClicked(final StepperLayout.OnCompleteClickedCallback callback) {\n        new Handler().postDelayed(new Runnable() {\n            @Override\n            public void run() {\n                callback.complete();\n            }\n        }, 2000L);\n    }\n\n    @Override\n    @UiThread\n    public void onBackClicked(StepperLayout.OnBackClickedCallback callback) {\n        Toast.makeText(this.getContext(), \"Your custom back action. Here you should cancel currently running operations\", Toast.LENGTH_SHORT).show();\n        callback.goToPrevStep();\n     }\n\n}\n```\n\n### Changing button labels \u0026 compound drawables per step\nSometimes you might want to have different labels on the Next/Complete and/or Back navigation buttons on different steps e.g. use the default labels on the first few steps,\nbut display 'Summary' just before the last page.\nYou might also want to use your custom icons instead of the default navigation button compound drawables or not show the compound drawables for some of the buttons.\n\u003cp\u003e\u003cimg src =\"./gifs/custom-navigation-buttons.gif\" width=\"360\" /\u003e\u003c/p\u003e\nIn such case you need to override the `getViewModel(int)` method from the `StepAdapter` e.g.\n\n```java\n    @NonNull\n    @Override\n    public StepViewModel getViewModel(@IntRange(from = 0) int position) {\n        StepViewModel.Builder builder = new StepViewModel.Builder(context)\n                .setTitle(R.string.tab_title);\n        switch (position) {\n            case 0:\n                builder\n                    .setEndButtonLabel(\"This way\")\n                    .setBackButtonLabel(\"Cancel\")\n                    .setNextButtonEndDrawableResId(R.drawable.ms_forward_arrow)\n                    .setBackButtonStartDrawableResId(StepViewModel.NULL_DRAWABLE);\n                break;\n            case 1:\n                builder\n                    .setEndButtonLabel(R.string.go_to_summary)\n                    .setBackButtonLabel(\"Go to first\")\n                    .setBackButtonStartDrawableResId(R.drawable.ms_back_arrow);\n                break;\n            case 2:\n                builder\n                    .setBackButtonLabel(\"Go back\")\n                    .setEndButtonLabel(\"I'm done!\");\n                break;\n            default:\n                throw new IllegalArgumentException(\"Unsupported position: \" + position);\n        }\n        return builder.create();\n    }\n```\n\nIt is also possible to hide Back/Next/Complete buttons on each step if needed.\nTo do so you need to call `setBackButtonVisible(false)` and/or `setEndButtonVisible(false)` on\n`StepViewModel.Builder` in your adapter.\n\n### Subtitles in tabs\nYou can set a subtitle for each step in stepper with tabs, e.g. to mark a step as optional.\nTo do so you need to set the subtitle by calling `StepViewModel.Builder#setSubtitle(int)` or `StepViewModel.Builder#setSubtitle(CharSequence)`\nin your adapter's `getViewModel` method.\n\n### Custom styling\nBasic styling can be done by choosing the active and inactive step colors. \nThere are some additional properties which can be changed directly from StepperLayout's attributes e.g. the background of bottom navigation buttons (see [StepperLayout attributes](#stepperlayout-attributes))\nFor advanced styling you can use `ms_stepperLayoutTheme` StepperLayout's attribute and provide your custom style to be used.\nSee 'Custom StepperLayout theme' in the sample app for an example.\n\u003cp\u003e\u003cimg src =\"./gifs/custom-theme.gif\" width=\"360\" /\u003e\u003c/p\u003e\n\n### Using same stepper styling across the application\nIf you have many steppers in your application in different activities/fragments you might want to set a common style in a theme.\nTo do so, you need to set the `ms_stepperStyle` attribute in the theme, e.g.\n```xml\n    \u003cstyle name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\"\u003e\n        ...\n        \n        \u003citem name=\"ms_stepperStyle\"\u003e@style/DotStepperStyle\u003c/item\u003e\n    \u003c/style\u003e\n```\nand declare that style in the XML you keep your styles at, e.g.\n```xml\n    \u003cstyle name=\"DotStepperStyle\"\u003e\n        \u003citem name=\"ms_stepperType\"\u003edots\u003c/item\u003e\n        \u003citem name=\"ms_activeStepColor\"\u003e#FFFFFF\u003c/item\u003e\n        \u003citem name=\"ms_inactiveStepColor\"\u003e#006867\u003c/item\u003e\n        \u003citem name=\"ms_bottomNavigationBackground\"\u003e?attr/colorAccent\u003c/item\u003e\n    \u003c/style\u003e\n```\n\n### Showing a Back button on first step\nBy default if the user is on the first step then the Back button in the bottom navigation is hidden. \nThis behaviour can be changed by setting ```ms_showBackButtonOnFirstStep``` to ```true```, e.g.\n```xml\n    \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n    \u003ccom.stepstone.stepper.StepperLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        android:id=\"@+id/stepperLayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        app:ms_showBackButtonOnFirstStep=\"true\"\n        app:ms_stepperType=\"dots\" /\u003e\n```\nTo get a callback when this button was pressed you need set a ```StepperListener``` and write your own custom return logic in the ```onReturn()``` method to e.g. close the Activity.\n\n### Using Views instead of Fragments as Steps\nIt is possible to use this library without the need to rely on Fragments.\nTo do so you need to use ```AbstractStepAdapter``` instead of ```AbstractFragmentStepAdapter```.\nFor an example of how to use it with views please see the sample app.\n\n### Showing an error on tabs if step verification failed\nTo show an error in the tabbed stepper if step verification fails you need to set `ms_showErrorStateEnabled` attribute to `true`.\n\u003cp\u003e\u003cimg src =\"./gifs/error-on-tabs.gif\" width=\"640\" /\u003e\u003c/p\u003e\n\nIf you want to keep the error displayed when going back to the previous step you need to also set `ms_showErrorStateOnBackEnabled` to `true`.\nIf you want display an error message below the step title you need to set `ms_showErrorMessageEnabled` to `true`. The message set in `VerificationError` will be then displayed.\n\n### Stepper feedback\nIt is possible to show stepper feedback for ongoing operations (see [Stepper feedback](https://material.io/guidelines/components/steppers.html#steppers-types-of-steppers)).\nTo do so you firstly need to set ```ms_stepperFeedbackType``` to one or more of:\n* ```tabs``` - shows a progress message instead of the tabs during operation.\n* ```content_progress``` - shows a progress bar on top of the steps' content.\n* ```content_fade``` - partially fades the content out during operation (should not be used together with ```content_overlay```). You can change the default fade amount with `ms_stepperFeedback_contentFadeAlpha` attribute.\n* ```content_overlay``` - shows a dimmed overlay over the content during the operation (should not be used together with ```content_fade```). You can change the overlay background with `ms_stepperFeedback_contentOverlayBackground` attribute.\n* ```disabled_bottom_navigation``` - disables the buttons in the bottom navigation during operation. In order to see that the buttons are disabled on the bottom navigation bar, make sure that the button colors are assigned using color selectors with a disabled state (see the sample app).\n* ```disabled_content_interaction``` - intercepts touch events on the steps' content and ignores them during operation.\n\nThe default is ```none``` which does nothing. It is possible to use multiple flags together.\n\nAfter setting this to show the feedback you need to call ```StepperLayout#showProgress(@NonNull String progressMessage)```\nand do hide the progress indicator you need to call ```StepperLayout#hideProgress()```.\n\n\u003cp\u003e\u003cimg src =\"./gifs/stepper-feedback.gif\" width=\"640\" /\u003e\u003c/p\u003e\n\nE.g.\nIn layout:\n```xml\n    \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n    \u003ccom.stepstone.stepper.StepperLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        android:id=\"@+id/stepperLayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        app:ms_backButtonColor=\"@color/ms_disabling_button_text_color_selector\"\n        app:ms_nextButtonColor=\"@color/ms_disabling_button_text_color_selector\"\n        app:ms_completeButtonColor=\"@color/ms_disabling_button_text_color_selector\"\n        app:ms_stepperType=\"tabs\"\n        app:ms_stepperFeedbackType=\"tabs|content|disabled_bottom_navigation\" /\u003e\n```\n\nand in BlockingStep:\n\n```java\npublic class StepperFeedbackStepFragment extends Fragment implements BlockingStep {\n\n    //...\n\n    @Override\n    @UiThread\n    public void onNextClicked(final StepperLayout.OnNextClickedCallback callback) {\n        callback.getStepperLayout().showProgress(\"Operation in progress, please wait...\");\n        new Handler().postDelayed(new Runnable() {\n            @Override\n            public void run() {\n                callback.goToNextStep();\n                callback.getStepperLayout().hideProgress();\n            }\n        }, 2000L);\n    }\n\n    //...\n\n```\n\n### Changing button text color when going to the next step should be disabled\nIt is possible to change the Next/Complete button's text color (together with right chevron's color)\nwhen all the criteria to go to the next step are not met. This color should indicate that\nthe user cannot go to next step yet and look as if disabled. Clicking on the button will still perform the regular\nstep verification. There is a custom state added since setting `android:state_enabled` to `false` in a color selector would disable the clicks\nand we want to have them so that we can show an info message for the user.\nIn order to set that color:\n\n1. Create a new color selector in `res/color`\n    \n```xml\n    \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n    \u003cselector xmlns:android=\"http://schemas.android.com/apk/res/android\" xmlns:app=\"http://schemas.android.com/apk/res-auto\"\u003e\n        \u003citem app:state_verification_failed=\"true\" android:color=\"#30BDBDBD\"/\u003e\n        \u003citem android:color=\"@color/ms_white\"/\u003e\n    \u003c/selector\u003e\n```\n\n2. Change button's (text) color in layout file\n    \n```xml\n    \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n    \u003ccom.stepstone.stepper.StepperLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        android:id=\"@+id/stepperLayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        app:ms_stepperType=\"dots\"\n        app:ms_nextButtonColor=\"@color/ms_custom_button_text_color\"\n        app:ms_completeButtonColor=\"@color/ms_custom_button_text_color\" /\u003e\n```\n\n3. Toggle the state in code\n    \n```java\n    mStepperLayout.setNextButtonVerificationFailed(!enabled);\n    mStepperLayout.setCompleteButtonVerificationFailed(!enabled);\n```\n\n### Hiding bottom navigation bar\nBottom navigation bar is shown by default. If in your UI you would like to\nhide the bottom navigation bar you can do that by either setting\nthe `ms_showBottomNavigation` attribute in XML to `false`\nor by setting it programmatically by calling ```StepperLayout#setShowBottomNavigation(boolean)```\nwith `false`.\n\n## StepperLayout attributes\n\n### View attributes\nA list of base StepperLayout attributes used for behaviour configuration \u0026 base UI configuration.\nFor advanced styling please see [StepperLayout style attributes](#stepperlayout-style-attributes).\n\n| Attribute name                  | Format                                                              | Description |\n| --------------------------------|---------------------------------------------------------------------|-------------|\n| *ms_stepperType*                | one of `dots`, `progress_bar`, `tabs` or `none`                     | **REQUIRED:** Type of the stepper |\n| *ms_backButtonColor*            | color or reference                                                  | BACK button's text color, can be also set via `StepperLayout#setBackButtonColor(int)`/`StepperLayout#setBackButtonColor(ColorStateList)`           |\n| *ms_nextButtonColor*            | color or reference                                                  | NEXT button's text color, can be also set via `StepperLayout#setNextButtonColor(int)`/`StepperLayout#setNextButtonColor(ColorStateList)`            |\n| *ms_completeButtonColor*        | color or reference                                                  | COMPLETE button's text color, can be also set via `StepperLayout#setCompleteButtonColor(int)`/`StepperLayout#setCompleteButtonColor(ColorStateList)`            |\n| *ms_activeStepColor*            | color or reference                                                  | Active step's color            |\n| *ms_inactiveStepColor*          | color or reference                                                  | Inactive step's color            |\n| *ms_bottomNavigationBackground* | reference                                                           | Background of the bottom navigation            |\n| *ms_backButtonBackground*       | reference                                                           | BACK button's background            |\n| *ms_nextButtonBackground*       | reference                                                           | NEXT button's background            |\n| *ms_completeButtonBackground*   | reference                                                           | COMPLETE button's background            |\n| *ms_backButtonText*             | string or reference                                                 | BACK button's text            |\n| *ms_nextButtonText*             | string or reference                                                 | NEXT button's text            |\n| *ms_completeButtonText*         | string or reference                                                 | COMPLETE button's text            |\n| *ms_tabStepDividerWidth*        | dimension or reference                                              | The width of the horizontal tab divider used in tabs stepper type            |\n| *ms_showBackButtonOnFirstStep*  | boolean                                                             | Flag indicating if the Back (Previous step) button should be shown on the first step. False by default.            |\n| *ms_errorColor*                 | color or reference                                                  | Error color in Tabs stepper |\n| *ms_showErrorStateEnabled*      | boolean                                                             | Flag indicating whether to show the error state. Only applicable for 'tabs' type. False by default. |\n| *ms_showErrorStateOnBackEnabled*| boolean                                                             | Flag indicating whether to keep showing the error state when user moves back. Only applicable for 'tabs' type. False by default. |\n| *ms_tabNavigationEnabled*       | boolean                                                             | Flag indicating whether step navigation is possible by clicking on the tabs directly. Only applicable for 'tabs' type. True by default. |\n| *ms_stepperFeedbackType*        | flag(s): `none` or `tabs`, `content_progress`, `content_fade`, `content_overlay`, `disabled_bottom_navigation` \u0026 `disabled_content_interaction` | Type(s) of stepper feedback. Can be a combination of `tabs`, `content_progress`, `content_fade`, `content_overlay`, `disabled_bottom_navigation` \u0026 `disabled_content_interaction`. Default is `none`.|\n| *ms_stepperFeedback_contentFadeAlpha* | float                                                         | An alpha value from 0 to 1.0f to be used for the faded out view if `content_fade` stepper feedback type is set. 0.5f by default. |\n| *ms_stepperFeedback_contentOverlayBackground* | reference                                             | Background to be used for the overlay on top of the content if `content_overlay` stepper feedback type is set. |\n| *ms_showBottomNavigation*       | boolean                                                             | Flag indicating if the Bottom Navigation bar should be shown on the layout. True by default. |\n| *ms_stepperLayoutTheme*         | reference                                                           | Theme to use for even more custom styling of the stepper layout. It is recommended that it should extend @style/MSDefaultStepperLayoutTheme, which is the default theme used. |\n\n### StepperLayout style attributes\nA list of `ms_stepperLayoutTheme` attributes responsible for styling of StepperLayout's child views.\n\n| Attribute name                    | Description                                                   |\n| ----------------------------------|---------------------------------------------------------------|\n| *ms_bottomNavigationStyle*        | Used by ms_bottomNavigation in layout/ms_stepper_layout       |\n| *ms_tabsContainerStyle*           | Used by ms_stepTabsContainer in layout/ms_stepper_layout      |\n| *ms_backNavigationButtonStyle*    | Used by ms_stepPrevButton in layout/ms_stepper_layout         |\n| *ms_nextNavigationButtonStyle*    | Used by ms_stepNextButton in layout/ms_stepper_layout         |\n| *ms_completeNavigationButtonStyle*| Used by ms_stepCompleteButton in layout/ms_stepper_layout     |\n| *ms_colorableProgressBarStyle*    | Used by ms_stepProgressBar in layout/ms_stepper_layout        |\n| *ms_stepPagerProgressBarStyle*    | Used by ms_stepPagerProgressBar in layout/ms_stepper_layout   |\n| *ms_stepPagerOverlayStyle*        | Used by ms_stepPagerOverlay in layout/ms_stepper_layout   |\n| *ms_stepTabsScrollViewStyle*      | Used by ms_stepTabsScrollView in layout/ms_tabs_container     |\n| *ms_stepTabsInnerContainerStyle*  | Used by ms_stepTabsInnerContainer in layout/ms_tabs_container |\n| *ms_stepTabsProgressMessageStyle* | Used by ms_stepTabsProgressMessage in layout/ms_tabs_container|\n| *ms_stepTabContainerStyle*        | Used in layout/ms_step_tab_container                          |\n| *ms_stepTabNumberStyle*           | Used by ms_stepNumber in layout/ms_step_tab                   |\n| *ms_stepTabDoneIndicatorStyle*    | Used by ms_stepDoneIndicator in layout/ms_step_tab            |\n| *ms_stepTabIconBackgroundStyle*   | Used by ms_stepIconBackground in layout/ms_step_tab           |\n| *ms_stepTabTitleStyle*            | Used by ms_stepTitle in layout/ms_step_tab                    |\n| *ms_stepTabSubtitleStyle*         | Used by ms_stepSubtitle in layout/ms_step_tab                    |\n| *ms_stepTabDividerStyle*          | Used by ms_stepDivider in layout/ms_step_tab                  |\n\n## Changelog\nSee [changelog](CHANGELOG.md)\n\n## Espresso tests\nIf you wish to run Espresso tests on a screen containing a `StepperLayout` you might want to use\n`espresso-material-stepper` which contains useful Espresso actions and matchers such as clicking on\nnavigation buttons \u0026 tabs.\nTo do so add a Gradle dependency:\n\n```groovy\n    androidTestCompile 'com.stepstone.stepper:espresso-material-stepper:X.X.X'\n```\n\nPlease see the sample app which uses it in instrumentation tests for more details.\n\n## Contributing\nAll contributions are welcome and encouraged!\n\nIf you wish to contribute please create an issue first explaining the proposed changes.\n\nProject is built on Circle CI on which we run static code analysis as well as unit \u0026 instrumentation tests\nto ensure that the latest changes don't break anything.\nTo check if your changes pass execute:\n\n```\n./gradlew checkWithUiTests\n```\n\nOr on a device below Marshmallow:\n```\n./gradlew checkWithUiTests -Ptest.integration.options.adbInstallOptions=-r\n```\n\n## License\nCopyright 2016 StepStone Services\n    \nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n    \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)\n    \nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n## Maintained by\n\u003ca href=\"http://www.stepstone.com\"\u003e\u003cimg src =\"./art/stepstone-logo.png\" alt=\"Stepstone\" /\u003e\u003c/a\u003e\n","funding_links":[],"categories":["Java","StepView"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstepstone-tech%2Fandroid-material-stepper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstepstone-tech%2Fandroid-material-stepper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstepstone-tech%2Fandroid-material-stepper/lists"}