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

input-and-forms.mddocs/

Input and Forms

Text input components, sliders, and form-related elements for collecting and validating user input with Material Design styling and behavior patterns.

Capabilities

Text Input Layout

A layout that wraps EditText components to provide Material Design styling, floating labels, helper text, and error handling.

public class TextInputLayout extends LinearLayout {
    public TextInputLayout(Context context);
    public TextInputLayout(Context context, AttributeSet attrs);
    
    // Hint management
    public void setHint(CharSequence hint);
    public CharSequence getHint();
    public void setHintEnabled(boolean enabled);
    public boolean isHintEnabled();
    public void setHintAnimationEnabled(boolean enabled);
    public boolean isHintAnimationEnabled();
    public void setHintTextAppearance(@StyleRes int resId);
    public void setHintTextColor(ColorStateList hintTextColor);
    public ColorStateList getHintTextColor();
    
    // Helper text
    public void setHelperText(CharSequence helperText);
    public CharSequence getHelperText();
    public void setHelperTextEnabled(boolean enabled);
    public boolean isHelperTextEnabled();
    public void setHelperTextTextAppearance(@StyleRes int resId);
    public void setHelperTextColor(ColorStateList helperTextColor);
    public ColorStateList getHelperTextColor();
    
    // Error handling
    public void setError(CharSequence error);
    public CharSequence getError();
    public void setErrorEnabled(boolean enabled);
    public boolean isErrorEnabled();
    public void setErrorTextAppearance(@StyleRes int resId);
    public void setErrorTextColor(ColorStateList errorTextColor);
    public ColorStateList getErrorTextColor();
    public void setErrorIconDrawable(@DrawableRes int resId);
    public void setErrorIconDrawable(Drawable errorIcon);
    public Drawable getErrorIconDrawable();
    public void setErrorIconTintList(ColorStateList errorIconTintList);
    public ColorStateList getErrorIconTintList();
    
    // Character counter
    public void setCounterEnabled(boolean enabled);
    public boolean isCounterEnabled();
    public void setCounterMaxLength(int maxLength);
    public int getCounterMaxLength();
    public void setCounterTextAppearance(int counterTextAppearance);
    public void setCounterTextColor(ColorStateList counterTextColor);
    public ColorStateList getCounterTextColor();
    public void setCounterOverflowTextAppearance(int counterOverflowTextAppearance);
    public void setCounterOverflowTextColor(ColorStateList counterOverflowTextColor);
    public ColorStateList getCounterOverflowTextColor();
    
    // Start icon
    public void setStartIconDrawable(@DrawableRes int resId);
    public void setStartIconDrawable(Drawable startIcon);
    public Drawable getStartIconDrawable();
    public void setStartIconContentDescription(@StringRes int resId);
    public void setStartIconContentDescription(CharSequence startIconContentDescription);
    public CharSequence getStartIconContentDescription();
    public void setStartIconOnClickListener(View.OnClickListener startIconOnClickListener);
    public void setStartIconOnLongClickListener(View.OnLongClickListener startIconOnLongClickListener);
    public void setStartIconVisible(boolean visible);
    public boolean isStartIconVisible();
    public void setStartIconTintList(ColorStateList startIconTintList);
    public ColorStateList getStartIconTintList();
    public void setStartIconTintMode(PorterDuff.Mode startIconTintMode);
    public PorterDuff.Mode getStartIconTintMode();
    
    // End icon
    public void setEndIconMode(int endIconMode);
    public int getEndIconMode();
    public void setEndIconDrawable(@DrawableRes int resId);
    public void setEndIconDrawable(Drawable endIcon);
    public Drawable getEndIconDrawable();
    public void setEndIconContentDescription(@StringRes int resId);
    public void setEndIconContentDescription(CharSequence endIconContentDescription);
    public CharSequence getEndIconContentDescription();
    public void setEndIconOnClickListener(View.OnClickListener endIconOnClickListener);
    public void setEndIconOnLongClickListener(View.OnLongClickListener endIconOnLongClickListener);
    public void setEndIconVisible(boolean visible);
    public boolean isEndIconVisible();
    public void setEndIconTintList(ColorStateList endIconTintList);
    public ColorStateList getEndIconTintList();
    public void setEndIconTintMode(PorterDuff.Mode endIconTintMode);
    public PorterDuff.Mode getEndIconTintMode();
    public void setEndIconActivated(boolean endIconActivated);
    public boolean isEndIconActivated();
    
    // Prefix and suffix text
    public void setPrefixText(CharSequence prefixText);
    public CharSequence getPrefixText();
    public void setPrefixTextAppearance(@StyleRes int prefixTextAppearance);
    public void setPrefixTextColor(ColorStateList prefixTextColor);
    public ColorStateList getPrefixTextColor();
    public TextView getPrefixTextView();
    public void setSuffixText(CharSequence suffixText);
    public CharSequence getSuffixText();
    public void setSuffixTextAppearance(@StyleRes int suffixTextAppearance);
    public void setSuffixTextColor(ColorStateList suffixTextColor);
    public ColorStateList getSuffixTextColor();
    public TextView getSuffixTextView();
    
    // Placeholder text
    public void setPlaceholderText(CharSequence placeholderText);
    public CharSequence getPlaceholderText();
    public void setPlaceholderTextAppearance(@StyleRes int placeholderTextAppearance);
    public void setPlaceholderTextColor(ColorStateList placeholderTextColor);
    public ColorStateList getPlaceholderTextColor();
    
    // EditText access
    public EditText getEditText();
    
    // Shape appearance
    public void setShapeAppearanceModel(ShapeAppearanceModel shapeAppearanceModel);
    public ShapeAppearanceModel getShapeAppearanceModel();
    
    // Listeners
    public void addOnEndIconChangedListener(OnEndIconChangedListener listener);
    public void removeOnEndIconChangedListener(OnEndIconChangedListener listener);
    public void clearOnEndIconChangedListeners();
    public void addOnEditTextAttachedListener(OnEditTextAttachedListener listener);
    public void removeOnEditTextAttachedListener(OnEditTextAttachedListener listener);
    public void clearOnEditTextAttachedListeners();
    
    public interface OnEndIconChangedListener {
        void onEndIconChanged(TextInputLayout textInputLayout, int previousIcon);
    }
    
    public interface OnEditTextAttachedListener {
        void onEditTextAttached(TextInputLayout textInputLayout);
    }
}

End Icon Mode Constants:

public static final int END_ICON_NONE = 0;
public static final int END_ICON_PASSWORD_TOGGLE = 1;
public static final int END_ICON_CLEAR_TEXT = 2;
public static final int END_ICON_DROPDOWN_MENU = 3;
public static final int END_ICON_CUSTOM = -1;

Text Input EditText

A specialized EditText designed for use with TextInputLayout.

public class TextInputEditText extends AppCompatEditText {
    public TextInputEditText(Context context);
    public TextInputEditText(Context context, AttributeSet attrs);
    
    public CharSequence getHint();
    public TextInputLayout getTextInputLayout();
}

Material AutoComplete TextView

An AutoCompleteTextView with Material Design styling for dropdown selections.

public class MaterialAutoCompleteTextView extends AppCompatAutoCompleteTextView {
    public MaterialAutoCompleteTextView(Context context);
    public MaterialAutoCompleteTextView(Context context, AttributeSet attrs);
    
    public void setAdapter(ListAdapter adapter);
    public ListAdapter getAdapter();
    public void setSimpleItems(@ArrayRes int arrayResId);
    public void setSimpleItems(String[] items);
}

Slider

A Material Design slider for selecting values from a continuous or discrete range.

public class Slider extends BaseSlider<Slider, Slider.OnChangeListener, Slider.OnSliderTouchListener> {
    public Slider(Context context);
    public Slider(Context context, AttributeSet attrs);
    
    // Value management
    public float getValue();
    public void setValue(float value);
    public void setValueFrom(float valueFrom);
    public float getValueFrom();
    public void setValueTo(float valueTo);
    public float getValueTo();
    public void setStepSize(float stepSize);
    public float getStepSize();
    
    // Focus management
    public void setFocusedThumbIndex(int index);
    public int getFocusedThumbIndex();
    
    // Listeners
    public void addOnChangeListener(OnChangeListener listener);
    public void removeOnChangeListener(OnChangeListener listener);
    public void clearOnChangeListeners();
    public void addOnSliderTouchListener(OnSliderTouchListener listener);
    public void removeOnSliderTouchListener(OnSliderTouchListener listener);
    public void clearOnSliderTouchListeners();
    
    // Label formatting
    public boolean hasLabelFormatter();
    public void setLabelFormatter(LabelFormatter formatter);
    
    // Thumb customization
    public void setCustomThumbDrawable(@DrawableRes int drawableResId);
    public void setCustomThumbDrawable(Drawable drawable);
    public void setCustomThumbDrawablesForValues(@DrawableRes int... customThumbDrawableResIds);
    public void setCustomThumbDrawablesForValues(Drawable... customThumbDrawables);
    
    // Appearance
    public void setThumbRadius(@IntRange(from = 0) int radius);
    public void setThumbRadiusResource(@DimenRes int radius);
    public int getThumbRadius();
    public void setHaloRadius(@IntRange(from = 0) int radius);
    public void setHaloRadiusResource(@DimenRes int radius);
    public int getHaloRadius();
    public void setThumbElevation(float elevation);
    public void setThumbElevationResource(@DimenRes int elevation);
    public float getThumbElevation();
    public void setTrackHeight(@IntRange(from = 0) int height);
    public void setTrackHeightResource(@DimenRes int height);
    public int getTrackHeight();
    
    public interface OnChangeListener {
        void onValueChange(Slider slider, float value, boolean fromUser);
    }
    
    public interface OnSliderTouchListener {
        void onStartTrackingTouch(Slider slider);
        void onStopTrackingTouch(Slider slider);
    }
    
    public interface LabelFormatter {
        String getFormattedValue(float value);
    }
}

Range Slider

A slider that allows selection of a range of values.

public class RangeSlider extends BaseSlider<RangeSlider, RangeSlider.OnChangeListener, RangeSlider.OnSliderTouchListener> {
    public RangeSlider(Context context);
    public RangeSlider(Context context, AttributeSet attrs);
    
    // Value management
    public List<Float> getValues();
    public void setValues(Float... values);
    public void setValues(List<Float> values);
    public void setMinSeparation(float minSeparation);
    public float getMinSeparation();
    public void setMinSeparationValue(float minSeparationValue);
    public float getMinSeparationValue();
    
    public interface OnChangeListener {
        void onValueChange(RangeSlider slider, float value, boolean fromUser);
    }
    
    public interface OnSliderTouchListener {
        void onStartTrackingTouch(RangeSlider slider);
        void onStopTrackingTouch(RangeSlider slider);
    }
}

Material TextView

A TextView with Material Design theming support.

public class MaterialTextView extends AppCompatTextView {
    public MaterialTextView(Context context);
    public MaterialTextView(Context context, AttributeSet attrs);
    
    public void setTextAppearance(@StyleRes int resId);
    public void setLineHeight(@Px int lineHeight);
    public int getLineHeight();
}

Usage Examples

Creating a Text Input with Validation

TextInputLayout textInputLayout = new TextInputLayout(context);
textInputLayout.setHint("Email Address");
textInputLayout.setHelperText("We'll never share your email");
textInputLayout.setEndIconMode(TextInputLayout.END_ICON_CLEAR_TEXT);
textInputLayout.setCounterEnabled(true);
textInputLayout.setCounterMaxLength(50);

TextInputEditText editText = new TextInputEditText(textInputLayout.getContext());
textInputLayout.addView(editText);

// Add validation
editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
    
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {}
    
    @Override
    public void afterTextChanged(Editable s) {
        String email = s.toString();
        if (!isValidEmail(email)) {
            textInputLayout.setError("Please enter a valid email address");
        } else {
            textInputLayout.setError(null);
        }
    }
});

Creating a Password Input Field

TextInputLayout passwordInputLayout = new TextInputLayout(context);
passwordInputLayout.setHint("Password");
passwordInputLayout.setEndIconMode(TextInputLayout.END_ICON_PASSWORD_TOGGLE);
passwordInputLayout.setHelperText("Must be at least 8 characters");

TextInputEditText passwordEditText = new TextInputEditText(passwordInputLayout.getContext());
passwordEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
passwordInputLayout.addView(passwordEditText);

Creating an AutoComplete Dropdown

MaterialAutoCompleteTextView autoCompleteTextView = new MaterialAutoCompleteTextView(context);
String[] countries = {"United States", "Canada", "Mexico", "United Kingdom", "France", "Germany"};
ArrayAdapter<String> adapter = new ArrayAdapter<>(context, android.R.layout.simple_dropdown_item_1line, countries);
autoCompleteTextView.setAdapter(adapter);

TextInputLayout dropdownLayout = new TextInputLayout(context);
dropdownLayout.setHint("Select Country");
dropdownLayout.setEndIconMode(TextInputLayout.END_ICON_DROPDOWN_MENU);
dropdownLayout.addView(autoCompleteTextView);

Creating a Value Slider

Slider volumeSlider = new Slider(context);
volumeSlider.setValueFrom(0f);
volumeSlider.setValueTo(100f);
volumeSlider.setValue(50f);
volumeSlider.setStepSize(1f);

volumeSlider.setLabelFormatter(value -> (int) value + "%");

volumeSlider.addOnChangeListener((slider, value, fromUser) -> {
    if (fromUser) {
        setVolume((int) value);
    }
});

volumeSlider.addOnSliderTouchListener(new Slider.OnSliderTouchListener() {
    @Override
    public void onStartTrackingTouch(Slider slider) {
        // User started dragging
    }
    
    @Override
    public void onStopTrackingTouch(Slider slider) {
        // User stopped dragging
        saveVolumePreference((int) slider.getValue());
    }
});

Creating a Range Slider for Price Filter

RangeSlider priceRangeSlider = new RangeSlider(context);
priceRangeSlider.setValueFrom(0f);
priceRangeSlider.setValueTo(1000f);
priceRangeSlider.setValues(100f, 500f);
priceRangeSlider.setStepSize(10f);
priceRangeSlider.setMinSeparation(50f);

priceRangeSlider.setLabelFormatter(value -> "$" + (int) value);

priceRangeSlider.addOnChangeListener((slider, value, fromUser) -> {
    if (fromUser) {
        List<Float> values = slider.getValues();
        float minPrice = values.get(0);
        float maxPrice = values.get(1);
        filterProductsByPrice(minPrice, maxPrice);
    }
});

Creating a Form with Multiple Inputs

LinearLayout formLayout = new LinearLayout(context);
formLayout.setOrientation(LinearLayout.VERTICAL);

// Name input
TextInputLayout nameInputLayout = new TextInputLayout(context);
nameInputLayout.setHint("Full Name");
nameInputLayout.setStartIconDrawable(R.drawable.ic_person);
TextInputEditText nameEditText = new TextInputEditText(nameInputLayout.getContext());
nameInputLayout.addView(nameEditText);

// Email input
TextInputLayout emailInputLayout = new TextInputLayout(context);
emailInputLayout.setHint("Email Address");
emailInputLayout.setStartIconDrawable(R.drawable.ic_email);
emailInputLayout.setEndIconMode(TextInputLayout.END_ICON_CLEAR_TEXT);
TextInputEditText emailEditText = new TextInputEditText(emailInputLayout.getContext());
emailEditText.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
emailInputLayout.addView(emailEditText);

// Phone input
TextInputLayout phoneInputLayout = new TextInputLayout(context);
phoneInputLayout.setHint("Phone Number");
phoneInputLayout.setStartIconDrawable(R.drawable.ic_phone);
phoneInputLayout.setPrefixText("+1 ");
TextInputEditText phoneEditText = new TextInputEditText(phoneInputLayout.getContext());
phoneEditText.setInputType(InputType.TYPE_CLASS_PHONE);
phoneInputLayout.addView(phoneEditText);

formLayout.addView(nameInputLayout);
formLayout.addView(emailInputLayout);
formLayout.addView(phoneInputLayout);

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