CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-google-android-material--material

Google's official Material Design components library for Android applications with comprehensive UI components, theming, and animations.

Pending
Overview
Eval results
Files

buttons-and-selection.mddocs/

Buttons and Selection Controls

Core input controls including buttons, chips, checkboxes, radio buttons, and switches with Material Design styling and behavior. These components provide consistent interaction patterns following Material Design principles.

Capabilities

Material Button

A Material Design button with extensive customization options including icons, stroke styling, and corner radius.

public class MaterialButton extends AppCompatButton {
    public MaterialButton(Context context);
    public MaterialButton(Context context, AttributeSet attrs);
    
    // Icon management
    public void setIcon(Drawable icon);
    public Drawable getIcon();
    public void setIconTint(ColorStateList iconTint);
    public ColorStateList getIconTint();
    public void setIconSize(int iconSize);
    public int getIconSize();
    public void setIconGravity(int iconGravity);
    public int getIconGravity();
    
    // Stroke and corners
    public void setStrokeColor(ColorStateList strokeColor);
    public ColorStateList getStrokeColor();
    public void setStrokeWidth(int strokeWidth);
    public int getStrokeWidth();
    public void setCornerRadius(int cornerRadius);
    public int getCornerRadius();
    
    // Ripple effect
    public void setRippleColor(ColorStateList rippleColor);
    public ColorStateList getRippleColor();
    
    // Checkable behavior
    public void setCheckable(boolean checkable);
    public boolean isCheckable();
    public void setChecked(boolean checked);
    public boolean isChecked();
    public void toggle();
    
    // Listeners
    public void addOnCheckedChangeListener(OnCheckedChangeListener listener);
    public void removeOnCheckedChangeListener(OnCheckedChangeListener listener);
    
    public interface OnCheckedChangeListener {
        void onCheckedChanged(MaterialButton button, boolean isChecked);
    }
}

Usage Example:

MaterialButton button = new MaterialButton(context);
button.setText("Save");
button.setIcon(ContextCompat.getDrawable(context, R.drawable.ic_save));
button.setIconGravity(MaterialButton.ICON_GRAVITY_TEXT_START);
button.setStrokeColor(ColorStateList.valueOf(Color.BLUE));
button.setStrokeWidth(2);
button.setCornerRadius(8);
button.setOnClickListener(v -> saveData());

Material Button Toggle Group

A container for grouping related MaterialButtons with single or multiple selection support.

public class MaterialButtonToggleGroup extends LinearLayout {
    public MaterialButtonToggleGroup(Context context);
    public MaterialButtonToggleGroup(Context context, AttributeSet attrs);
    
    // Selection management
    public void check(@IdRes int id);
    public void uncheck(@IdRes int id);
    public void clearChecked();
    public int getCheckedButtonId();
    public List<Integer> getCheckedButtonIds();
    
    // Selection behavior
    public void setSingleSelection(boolean singleSelection);
    public boolean isSingleSelection();
    public void setSelectionRequired(boolean selectionRequired);
    public boolean isSelectionRequired();
    
    // Listeners
    public void addOnButtonCheckedListener(OnButtonCheckedListener listener);
    public void removeOnButtonCheckedListener(OnButtonCheckedListener listener);
    
    public interface OnButtonCheckedListener {
        void onButtonChecked(MaterialButtonToggleGroup group, @IdRes int checkedId, boolean isChecked);
    }
}

Material Split Button

A specialized container for creating split buttons with a main action and a secondary dropdown action.

public class MaterialSplitButton extends MaterialButtonGroup {
    public MaterialSplitButton(Context context);
    public MaterialSplitButton(Context context, AttributeSet attrs);
    
    // Inherited from MaterialButtonGroup
    public void addView(View child, int index, ViewGroup.LayoutParams params);
    public void setChildrenDrawingOrderEnabled(boolean enabled);
    public boolean isChildrenDrawingOrderEnabled();
    
    // Layout and appearance inherited from parent classes
    public void setOrientation(int orientation);
    public int getOrientation();
}

Usage Example:

MaterialSplitButton splitButton = new MaterialSplitButton(context);

// Main action button
MaterialButton mainButton = new MaterialButton(context);
mainButton.setText("Save");
mainButton.setIcon(ContextCompat.getDrawable(context, R.drawable.ic_save));
mainButton.setOnClickListener(v -> saveDocument());

// Dropdown button
MaterialButton dropdownButton = new MaterialButton(context);
dropdownButton.setIcon(ContextCompat.getDrawable(context, R.drawable.ic_arrow_drop_down));
dropdownButton.setOnClickListener(v -> showSaveOptions());

splitButton.addView(mainButton);
splitButton.addView(dropdownButton);

Floating Action Button

A circular button that performs primary actions in an application.

public class FloatingActionButton extends VisibilityAwareImageButton implements ExpandableWidget {
    public FloatingActionButton(Context context);
    public FloatingActionButton(Context context, AttributeSet attrs);
    
    // Size management
    public void setSize(int size);
    public int getSize();
    
    // Image and tint
    public void setSupportImageTintList(ColorStateList tint);
    public ColorStateList getSupportImageTintList();
    public void setSupportImageTintMode(PorterDuff.Mode tintMode);
    public PorterDuff.Mode getSupportImageTintMode();
    
    // Background
    public void setBackgroundTintList(ColorStateList tint);
    public ColorStateList getBackgroundTintList();
    public void setBackgroundTintMode(PorterDuff.Mode tintMode);
    public PorterDuff.Mode getBackgroundTintMode();
    
    // Ripple effect
    public void setRippleColor(@ColorInt int color);
    public void setRippleColor(ColorStateList rippleColor);
    public ColorStateList getRippleColor();
    
    // Visibility animations
    public void show();
    public void show(OnVisibilityChangedListener listener);
    public void hide();
    public void hide(OnVisibilityChangedListener listener);
    
    // Expandable behavior
    public boolean setExpanded(boolean expanded);
    public boolean isExpanded();
    
    // Elevation
    public void setCompatElevation(float elevation);
    public float getCompatElevation();
    public void setCompatHoveredFocusedTranslationZ(float translationZ);
    public float getCompatHoveredFocusedTranslationZ();
    public void setCompatPressedTranslationZ(float translationZ);
    public float getCompatPressedTranslationZ();
    
    public abstract static class OnVisibilityChangedListener {
        public void onShown(FloatingActionButton fab);
        public void onHidden(FloatingActionButton fab);
    }
}

Constants:

public static final int SIZE_MINI = 1;
public static final int SIZE_NORMAL = 0;
public static final int SIZE_AUTO = -1;

Extended Floating Action Button

An extended FAB with both icon and text.

public class ExtendedFloatingActionButton extends MaterialButton implements ExpandableWidget {
    public ExtendedFloatingActionButton(Context context);
    public ExtendedFloatingActionButton(Context context, AttributeSet attrs);
    
    // Text and icon
    public void setText(CharSequence text);
    public CharSequence getText();
    public void setIcon(Drawable icon);
    public Drawable getIcon();
    public void setIconTint(ColorStateList iconTint);
    public ColorStateList getIconTint();
    
    // Extended state
    public void extend();
    public void extend(OnChangedCallback callback);
    public void shrink();
    public void shrink(OnChangedCallback callback);
    public boolean isExtended();
    public void setExtended(boolean extended);
    
    // Visibility
    public void show();
    public void show(OnChangedCallback callback);
    public void hide();
    public void hide(OnChangedCallback callback);
    
    public abstract static class OnChangedCallback {
        public void onShown(ExtendedFloatingActionButton extendedFab);
        public void onHidden(ExtendedFloatingActionButton extendedFab);
        public void onExtended(ExtendedFloatingActionButton extendedFab);
        public void onShrunken(ExtendedFloatingActionButton extendedFab);
    }
}

Chip

A compact element representing an input, attribute, or action.

public class Chip extends AppCompatCheckBox implements ChipDrawable.Delegate {
    public Chip(Context context);
    public Chip(Context context, AttributeSet attrs);
    
    // Text
    public void setText(CharSequence text);
    public CharSequence getText();
    
    // Chip icon
    public void setChipIcon(Drawable chipIcon);
    public Drawable getChipIcon();
    public void setChipIconTint(ColorStateList chipIconTint);
    public ColorStateList getChipIconTint();
    public void setChipIconSize(float chipIconSize);
    public float getChipIconSize();
    
    // Close icon
    public void setCloseIcon(Drawable closeIcon);
    public Drawable getCloseIcon();
    public void setCloseIconTint(ColorStateList closeIconTint);
    public ColorStateList getCloseIconTint();
    public void setCloseIconSize(float closeIconSize);
    public float getCloseIconSize();
    public void setOnCloseIconClickListener(View.OnClickListener listener);
    public View.OnClickListener getOnCloseIconClickListener();
    
    // Appearance
    public void setChipBackgroundColor(ColorStateList chipBackgroundColor);
    public ColorStateList getChipBackgroundColor();
    public void setChipStrokeColor(ColorStateList chipStrokeColor);
    public ColorStateList getChipStrokeColor();
    public void setChipStrokeWidth(float chipStrokeWidth);
    public float getChipStrokeWidth();
    public void setChipCornerRadius(float chipCornerRadius);
    public float getChipCornerRadius();
    public void setChipMinHeight(float chipMinHeight);
    public float getChipMinHeight();
    
    // Ripple
    public void setRippleColor(ColorStateList rippleColor);
    public ColorStateList getRippleColor();
    
    // Checkable behavior
    public void setCheckable(boolean checkable);
    public boolean isCheckable();
    public void setChecked(boolean checked);
    public boolean isChecked();
}

Chip Group

A container for a set of chips with single or multiple selection.

public class ChipGroup extends ViewGroup {
    public ChipGroup(Context context);
    public ChipGroup(Context context, AttributeSet attrs);
    
    // Spacing
    public void setChipSpacing(int chipSpacing);
    public void setChipSpacingHorizontal(int chipSpacingHorizontal);
    public void setChipSpacingVertical(int chipSpacingVertical);
    public int getChipSpacing();
    public int getChipSpacingHorizontal();
    public int getChipSpacingVertical();
    
    // Layout
    public void setSingleLine(boolean singleLine);
    public boolean isSingleLine();
    
    // Selection
    public void setSingleSelection(boolean singleSelection);
    public void setSingleSelection(@BoolRes int id);
    public boolean isSingleSelection();
    public void setSelectionRequired(boolean selectionRequired);
    public boolean isSelectionRequired();
    
    // Selection management
    public void check(@IdRes int id);
    public void uncheck(@IdRes int id);
    public void clearCheck();
    public int getCheckedChipId();
    public List<Integer> getCheckedChipIds();
    
    // Listeners
    public void setOnCheckedChangeListener(OnCheckedChangeListener listener);
    
    public interface OnCheckedChangeListener {
        void onCheckedChanged(ChipGroup group, @IdRes int checkedId);
    }
}

Material CheckBox

A Material Design themed CheckBox.

public class MaterialCheckBox extends AppCompatCheckBox {
    public MaterialCheckBox(Context context);
    public MaterialCheckBox(Context context, AttributeSet attrs);
    
    // Material theming
    public void setUseMaterialThemeColors(boolean useMaterialThemeColors);
    public boolean isUseMaterialThemeColors();
    
    // Button tint
    public void setButtonTintList(ColorStateList tint);
    public ColorStateList getButtonTintList();
    
    // Center positioning
    public void setCenterIfNoTextEnabled(boolean centerIfNoTextEnabled);
    public boolean isCenterIfNoTextEnabled();
}

Material Radio Button

A Material Design themed RadioButton.

public class MaterialRadioButton extends AppCompatRadioButton {
    public MaterialRadioButton(Context context);
    public MaterialRadioButton(Context context, AttributeSet attrs);
    
    // Material theming
    public void setUseMaterialThemeColors(boolean useMaterialThemeColors);
    public boolean isUseMaterialThemeColors();
}

Switch Material

A Material Design switch component.

public class SwitchMaterial extends SwitchCompat {
    public SwitchMaterial(Context context);
    public SwitchMaterial(Context context, AttributeSet attrs);
    
    // Material theming  
    public void setUseMaterialThemeColors(boolean useMaterialThemeColors);
    public boolean isUseMaterialThemeColors();
}

Usage Examples

Creating a Button with Icon and Stroke

MaterialButton button = new MaterialButton(context);
button.setText("Download");
button.setIcon(ContextCompat.getDrawable(context, R.drawable.ic_download));
button.setIconGravity(MaterialButton.ICON_GRAVITY_TEXT_START);
button.setStrokeColor(ColorStateList.valueOf(getColor(R.color.primary)));
button.setStrokeWidth(2);
button.setCornerRadius(16);
button.setOnClickListener(v -> startDownload());

Creating a Toggle Button Group

MaterialButtonToggleGroup toggleGroup = new MaterialButtonToggleGroup(context);
toggleGroup.setSingleSelection(true);
toggleGroup.setSelectionRequired(true);

MaterialButton option1 = new MaterialButton(context);
option1.setText("Option 1");
option1.setId(R.id.option1);

MaterialButton option2 = new MaterialButton(context);
option2.setText("Option 2");
option2.setId(R.id.option2);

toggleGroup.addView(option1);
toggleGroup.addView(option2);
toggleGroup.check(R.id.option1);

toggleGroup.addOnButtonCheckedListener((group, checkedId, isChecked) -> {
    if (isChecked) {
        handleOptionSelected(checkedId);
    }
});

Creating a Chip Group for Filtering

ChipGroup chipGroup = new ChipGroup(context);
chipGroup.setSingleSelection(false);

String[] filters = {"All", "Active", "Completed", "Archived"};
for (String filter : filters) {
    Chip chip = new Chip(context);
    chip.setText(filter);
    chip.setCheckable(true);
    chip.setChipIcon(ContextCompat.getDrawable(context, R.drawable.ic_filter));
    chipGroup.addView(chip);
}

chipGroup.setOnCheckedChangeListener((group, checkedId) -> {
    List<Integer> checkedIds = group.getCheckedChipIds();
    applyFilters(checkedIds);
});

Constants

// MaterialButton icon gravity
public static final int ICON_GRAVITY_START = 1;
public static final int ICON_GRAVITY_TEXT_START = 2;
public static final int ICON_GRAVITY_END = 3;
public static final int ICON_GRAVITY_TEXT_END = 4;
public static final int ICON_GRAVITY_TOP = 16;
public static final int ICON_GRAVITY_TEXT_TOP = 32;

// FloatingActionButton sizes
public static final int SIZE_MINI = 1;
public static final int SIZE_NORMAL = 0;
public static final int SIZE_AUTO = -1;

Install with Tessl CLI

npx tessl i tessl/maven-com-google-android-material--material

docs

buttons-and-selection.md

feedback-and-communication.md

index.md

input-and-forms.md

layout-and-containers.md

navigation-components.md

pickers-and-selection.md

theming-and-styling.md

tile.json