Skip to content

An alternate state control for views for Android. Can be used for showing that a RecyclerView or any other View has no data

Notifications You must be signed in to change notification settings

kishannareshpal/StateView

Repository files navigation

StateView

An alternate state control for views for Android. Can be used to show that a RecyclerView or any other View has no data

forthebadge forthebadge
API Download

💪 Installation

Add the library to the dependencies { ... } section of your app level build.gradle file:

// Refer to the badge named Download for the version number.
implementation 'com.kishannareshpal:stateview:<version>'

🍺 Usage

In the layout:

<com.kishannareshpal.stateview.StateView
     android:id="@+id/stateview"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     app:stateMode="normal">

        <!-- 
         Place 1 child view here.
         E.g.: <RecyclerView .../> 
        -->
</com.kishannareshpal.stateview.StateView>

NOTE: You can only add One (1) child view to StateView.
If you try adding more than one child view, you will get an IllegalStateException.

Attributes

Attribute Description Data Type Enums Default Value
app:stateMode Sets the state mode. enum normal
alternate
normal
app:stateBackgroundColor Sets the background color for the alternate state mode. color n/a

#FFFFFF

(white)

app:stateGravity Change the alternate state components gravity (icon, title, icons, progress bars, description, button) enum

left

center

right

center
app:stateContentPaddingLeft Change the left content padding. dimension (dp) n/a 18dp
app:stateContentPaddingTop Change the top content padding. dimension (dp) n/a 18dp
app:stateContentPaddingRight Change the right content padding. dimension (dp) n/a 18dp
app:stateContentPaddingBottom Change the bottom content padding. dimension (dp) n/a 18dp
app:stateMainProgressEnabled If the main circular progress is enabled/shown. boolean n/a true
app:stateSmallProgressEnabled If the small circular progress is enabled/shown. boolean n/a true
app:stateProgressStrokeColor Sets the circular progress stroke color. color n/a

#000

(black)

app:stateProgressBackgroundColor Sets the circular progress background color color n/a

#00000000

(transparent)

app:stateIcon Sets a 56x56dp image. drawable n/a null
app:stateTitle Sets the title text. string n/a null
app:stateTitleTextSize Sets the title text size. dimension (sp) n/a 24sp
app:stateTitleTextColor Sets the title text color. color n/a

#000

(black)

app:stateTitleTextAppearance Customize color, fontFamily, size via style for title text. StyleRes n/a @style/StateViewTheme.TitleTextAppearance
app:stateDescription Sets the description text. string n/a null
app:stateDescriptionTextSize Sets the description text size. dimension (sp) n/a 16sp
app:stateDescriptionTextColor Sets the description text color color n/a

#3f3f3f

(dark grey)

app:stateDescriptionTextAppearance Customize color, fontFamily, size via style for description text. StyleRes n/a @style/StateViewTheme.DescriptionTextAppearance
app:stateActionButtonText Sets the action button text. string n/a null
app:stateActionButtonTextColor Sets the action button text color. color n/a

#fff

(white)

app:stateActionButtonColor Sets the action button background color. color n/a

#000

(black)

app:stateActionButtonCornerRadius Sets the action button corner radius. dimension (dp) n/a rounded (64dp)
app:stateActionButtonTextAppearance Customize color, fontFamily, size via style for action button text. StyleRes n/a @style/StateViewTheme.ActionButton
TextAppearance
### Theming

You can overwrite StateViewTheme in your styles.xml to apply your customized theme for the StateView:

<styles name="MyStateViewTheme" parent="StateViewTheme">
    <!-- Customize the stateview here with any attribute listed
       on the atrributes table above. 
    -->

    <!-- Example: -->
    <item name="stateBackgroundColor">#ff6363</item>
    <item name="stateActionButtonCornerRadius">8dp</item>
    …    
</styles>

After you have your styles MyStateViewTheme set, use it by applying the style attribute to the StateView in your layout file as follows:

<com.kishannareshpal.stateview.StateView
    …
    style="@style/MyStateViewTheme">

</com.kishannareshpal.stateview.StateView>

TextAppearance Styling (text color, font, size, spacing, ...)

To customise the default text appearance for title, description and actionButton you can override the following styles:

Style names Description
StateViewTheme.TitleTextAppearance Styles the title text.
StateViewTheme.DescriptionTextAppearance Styles the description text.
StateViewTheme.ActionButtonTextAppearance Styles the action button text.

For example, if you want to style the title, add this to your styles.xml

<styles name="MyTitleTextAppearance" parent="StateViewTheme.TitleTextAppearance">
    <!-- Customize the text appearance for the title -->

    <!-- Example: -->
    <item name="android:fontFamily">@font/times_new_roman</item>
    <item name="android:textColor">@color/blue</item>
    <item name="android:textSize">48sp</item>
    …    
</styles>

Now either apply it to the attribute app:stateTitleTextAppearance in your layout:

<!-- The same applies to
      • app:stateDescriptionTextAppearance
      • app:stateActionButtonTextAppearance 
 -->
<com.kishannareshpal.stateview.StateView
     …
     app:stateTitleTextAppearance="@style/MyTitleTextAppearance">

</com.kishannareshpal.stateview.StateView>

Or in your custom StateView theme:

<styles name="MyStateViewTheme" parent="StateViewTheme">
    …    
    <item name="stateTitleTextAppearance">@style/MyTitleTextAppearance</item>
    <!-- The same applies to
      • <item name="stateDescriptionTextAppearance">…</item>
      • <item name="stateActionButtonTextAppearance">…</item> 
     -->

</styles>

Methods: List

Getters

Name Return type Description
getState() State Gets the currently set state.
getTitleText() @Nullable CharSequence Gets the currently set title text.
getDescriptionText() @Nullable CharSequence Gets the currently set description text.
getActionButton() MaterialButton Exposes the action button. May be used to customise stuff like adding an icon.

Setter

Name
void backgroundColor(@ColorInt int backgroundColor)
void contentPadding(int left, int top, int right, int bottom)
void contentPadding(int padding)
void gravity(ComponentGravity gravity)
void mainIcon(@Nullable @DrawableRes Integer iconRes, boolean isGif)
void mainProgressEnabled(boolean mainProgressEnabled)
void smallProgressEnabled(boolean smallProgressEnabled)
void progressStrokeColor(@ColorInt int progressStrokeColor)
void progressBackgroundColor(@ColorInt int progressBackgroundColor)

void state(State state)

void state(State state, boolean animated)

void title(@Nullable CharSequence title)

void title(@Nullable CharSequence title, AnimationType titleTextChangeAnimationType)

void titleTextSize(int titleTextSize)
void titleTextColor(@ColorInt int titleTextColor)
void description(@Nullable CharSequence description)
void description(@Nullable CharSequence description, AnimationType descriptionTextChangeAnimationType)
void descriptionTextColor(@ColorInt int descriptionTextColor)
void descriptionTextSize(int descriptionTextSize)
void actionButtonText(@Nullable CharSequence actionButtonText)
void actionButtonCornerRadius(int actionButtonCornerRadius)
void actionButtonTextColor(@ColorInt int actionButtonTextColor)
void actionButtonColor(@ColorInt int actionButtonColor)
void onActionButtonClick(OnActionButtonClickListener onActionButtonClickListener)
void actionButtonEnabled(boolean enabled)
void actionButtonIsVisible(boolean isVisible)
### Methods: Details

backgroundColor

Changes the default background color of the state view in State#NORMAL.

public void backgroundColor (@ColorInt int backgroundColor)
Parameter Description
backgroundColor

@ColorInt int: the background color you want to set.

Use ContextCompat#getColor(Context, int)

#### `contentPadding`

Change the content padding.

public void contentPadding (int left, int top, int right, int bottom)
public void contentPadding (int padding)
Parameter Description
padding int: all sides padding.
left int: left side padding.
top int: top side padding.
right int: right side padding.
bottom int: bottom side padding.

gravity

Change the gravity of the state view components in State#ALTERNATE.

public void gravity (ComponentGravity gravity)
Parameter Description
gravity

ComponentGravity: the gravity of title, main progress, description and button on State#ALTERNATE .
This is an enum consisting of three (3) values:

  • LEFT: to set the gravity to the left (start)
  • CENTER: to set the gravity to the center.
  • RIGHT: to set the gravity to the right (end).
#### `mainIcon`

Change the icon.

public void mainIcon (@Nullable @DrawableRes Integer iconRes, boolean isGif)
Parameter Description
iconRes @Nullable @DrawableRes Integer: the drawable resource identifier. If null, icon will be hidden.
isGif boolean: set this to true if you are passing a .gif file to iconRes to view it animate infinitely.

mainProgressEnabled

Shows/hides the main circular progress.

public void mainProgressEnabled (boolean mainProgressEnabled)
Parameter Description
mainProgressEnabled boolean: set this to true to show the main circular progress (this will replace the icon). If false, the main progress will be hidden (and be replaced with the icon if mainIcon is set).

smallProgressEnabled

Shows/hides the small circular progress.

public void smallProgressEnabled (boolean smallProgressEnabled)
Parameter Description
smallProgressEnabled boolean: set this to true to show the small circular progress in front of the description text. If false, the small progress will be hidden.

progressStrokeColor

Change all circular progress stroke color.

public void progressStrokeColor (@ColorInt int progressStrokeColor)
Parameter Description
progressStrokeColor

@ColorInt int: the stroke color of the main and small circular progress.

Use ContextCompat#getColor(Context, int)

#### `progressBackgroundColor`

Change all circular progress background color.

public void progressBackgroundColor (@ColorInt int progressBackgroundColor)
Parameter Description
progressBackgroundColor

@ColorInt int: the background color of the main and small circular progress.

Use ContextCompat#getColor(Context, int)

#### `state`

Change the state.

public void state (State state)
public void state (State state, boolean animated)
Parameter Description
state

State: the state to which you want to change.

This is an enum consisting of two (2) values:

  • NORMAL: use this to view the original view.
  • ALTERNATE: use this for showing the StateView Title, Description and other components.
animated boolean: if true, show a slight fade animation on the changing of states.
#### `title`

Change the title text.

public void title (@Nullable CharSequence title)
public void title (@Nullable CharSequence title, AnimationType titleTextChangeAnimationType)
Parameter Description
title

@Nullable CharSequence: the title text.

If null, title will be hidden.

titleTextChangeAnimationType

AnimationType: the animation type to use when changing the title text.
This is an enum consisting of four (4) values:

  • NO_ANIMATION: does not animate the text change. Same as title(CharSequence)
  • SLIDE_TO_TOP: slides the old text to top and back to normal with the new text.
  • SLIDE_TO_BOTTOM: slides the old text to bottom and back to normal with the new text.
  • FADE: fades out the old text and fades in the new text.
#### `titleTextSize`

Change the title text size.

public void titleTextSize (int titleTextSize)
Parameter Description
titleTextSize int: the title text size in sp.

titleTextColor

Change the title text color

public void titleTextColor (@ColorInt int titleTextColor)
Parameter Description
titleTextColor

@ColorInt int: the title text color.

Use ContextCompat#getColor(Context, int)

#### `description`

Change the description text.

public void description (@Nullable CharSequence description)
public void description (@Nullable CharSequence description, AnimationType descriptionTextChangeAnimationType)
Parameter Description
description

@Nullable CharSequence: the description text.

If null, description will be hidden.

descriptionTextChangeAnimationType

AnimationType: the animation type to use when changing the description text.
This is an enum consisting of four (4) values:

  • NO_ANIMATION: does not animate the text change. Same as title(CharSequence)
  • SLIDE_TO_TOP: slides the old text to top and back to normal with the new text.
  • SLIDE_TO_BOTTOM: slides the old text to bottom and back to normal with the new text.
  • FADE: fades out the old text and fades in the new text.
#### `descriptionTextSize`

Change the description text size.

public void descriptionTextSize (int descriptionTextSize)
Parameter Description
descriptionTextSize int: the description text size in sp.

descriptionTextColor

Change the description text color

public void descriptionTextColor (@ColorInt int descriptionTextColor)
Parameter Description
descriptionTextColor

@ColorInt int: the description text color.

Use ContextCompat#getColor(Context, int)

#### `actionButtonText`

Change the action button text.

public void actionButtonText (@Nullable CharSequence actionButtonText)
Parameter Description
actionButtonText

@Nullable CharSequence: the action button text.

If null , action button will be hidden.

#### `actionButtonColor`

Change the action button background color.

public void actionButtonColor (@ColorInt int actionButtonColor)
Parameter Description
actionButtonColor

@ColorInt int: the action button background color.

Use ContextCompat#getColor(Context, int)

#### `actionButtonCornerRadius`

Change the action button corner radius.

public void actionButtonCornerRadius (int actionButtonCornerRadiues)
Parameter Description
actionButtonCornerRadius int: corner radius in sp.

actionButtonTextColor

Change the action button text color.

public void actionButtonTextColor (@ColorInt int actionButtonTextColor)
Parameter Description
actionButtonTextColor

@ColorInt int: the action button text color.

Use ContextCompat#getColor(Context, int)

#### `onActionButtonClickListener`

The action to execute when the button is clicked.

public void onActionButtonClickListener (OnActionButtonClickListener onActionButtonClickListener)
Parameter Description
onActionButtonClickListener

OnActionButtonClickListener: Interface definition for a callback to be invoked when the action button is clicked.

void OnActionButtonClick(StateView sv, View actionBtn)

#### `actionButtonEnabled`

Change the enabled or disabled state of the action button.

public void actionButtonEnabled (boolean actionButtonEnabled)
Parameter Description
actionButtonEnabled boolean: if false, action button will be disabled of any touch input, and will have a visually light grey background. Otherwise, enabled.

actionButtonIsVisible

Changes the action button visibility only.

public void actionButtonIsVisible (boolean isVisible)
Parameter Description
isVisible boolean: if true, action button will be visible, otherwise, hidden.

🩺 Public Enums

enum State

State consists of two (2) enum values:

  • NORMAL: original view.
  • ALTERNATE: state view alternate view with custom Title, Description and other components.

enum ComponentGravity

ComponentGravity consists of four (3) enum values:

  • LEFT: to set the gravity to the left (start)
  • CENTER: to set the gravity to the center/middle.
  • RIGHT: to set the gravity to the right (end).

enum AnimationType

AnimationType consists of four (4) enum values:

  • NO_ANIMATION: no animation!
  • SLIDE_TO_TOP: slides the old text to top and back to normal with the new text.
  • SLIDE_TO_BOTTOM: slides the old text to bottom and back to normal with the new text.
  • FADE: fades out the old text and fades in the new text.

About

An alternate state control for views for Android. Can be used for showing that a RecyclerView or any other View has no data

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages