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

navigation-components.mddocs/

Navigation Components

Components for app navigation including bottom navigation, navigation drawer, tabs, navigation rail, and app bars.

Core Imports

import com.google.android.material.navigation.NavigationView;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigationrail.NavigationRailView;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.bottomappbar.BottomAppBar;
import com.google.android.material.search.SearchBar;
import com.google.android.material.search.SearchView;

Bottom Navigation View

Bottom navigation bar for switching between top-level views.

class BottomNavigationView extends NavigationBarView {
    BottomNavigationView(Context context);
    BottomNavigationView(Context context, AttributeSet attrs);
    
    // Selection listeners (deprecated - use NavigationBarView methods)
    void setOnNavigationItemSelectedListener(OnNavigationItemSelectedListener listener);
    void setOnNavigationItemReselectedListener(OnNavigationItemReselectedListener listener);
    
    // Menu and selection
    Menu getMenu();
    void setSelectedItemId(@IdRes int itemId);
    int getSelectedItemId();
    
    // Badges
    void setBadgeFor(@IdRes int menuItemId, BadgeDrawable badgeDrawable);
    BadgeDrawable getBadgeFor(@IdRes int menuItemId);
    void removeBadge(@IdRes int menuItemId);
    
    // Styling
    void setItemIconTintList(ColorStateList tint);
    ColorStateList getItemIconTintList();
    void setItemTextColor(ColorStateList textColor);
    ColorStateList getItemTextColor();
    void setItemBackgroundResource(@DrawableRes int resId);
    void setItemBackground(Drawable background);
    Drawable getItemBackground();
    
    // Label visibility
    void setLabelVisibilityMode(int mode);
    int getLabelVisibilityMode();
}

interface BottomNavigationView.OnNavigationItemSelectedListener {
    boolean onNavigationItemSelected(@NonNull MenuItem item);
}

interface BottomNavigationView.OnNavigationItemReselectedListener {
    void onNavigationItemReselected(@NonNull MenuItem item);
}

Usage Example

BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation);

// Handle navigation selection
bottomNav.setOnItemSelectedListener(item -> {
    switch (item.getItemId()) {
        case R.id.nav_home:
            // Navigate to home
            return true;
        case R.id.nav_search:
            // Navigate to search
            return true;
        case R.id.nav_profile:
            // Navigate to profile
            return true;
        default:
            return false;
    }
});

// Configure badges
BadgeDrawable badge = bottomNav.getOrCreateBadge(R.id.nav_notifications);
badge.setNumber(5);
badge.setVisible(true);

// Set selected item
bottomNav.setSelectedItemId(R.id.nav_home);

Navigation View

Navigation drawer for hierarchical navigation and app-level options.

class NavigationView extends ScrimInsetsFrameLayout {
    NavigationView(Context context);
    NavigationView(Context context, AttributeSet attrs);
    
    // Selection handling
    void setNavigationItemSelectedListener(OnNavigationItemSelectedListener listener);
    
    // Menu management
    Menu getMenu();
    void inflateMenu(@MenuRes int resId);
    
    // Header views
    View getHeaderView(int index);
    int getHeaderCount();
    View inflateHeaderView(@LayoutRes int res);
    void addHeaderView(View view);
    void removeHeaderView(View view);
    
    // Selection state
    void setCheckedItem(@IdRes int id);
    void setCheckedItem(MenuItem menuItem);
    MenuItem getCheckedItem();
    
    // Item styling
    void setItemIconTintList(ColorStateList tint);
    ColorStateList getItemIconTintList();
    void setItemTextColor(ColorStateList textColor);
    ColorStateList getItemTextColor();
    void setItemBackground(Drawable itemBackground);
    Drawable getItemBackground();
    void setItemBackgroundResource(@DrawableRes int resId);
    
    // Item layout
    void setItemHorizontalPadding(@Dimension int padding);
    int getItemHorizontalPadding();
    void setItemHorizontalPaddingResource(@DimenRes int paddingResource);
    void setItemIconPadding(@Dimension int padding);
    int getItemIconPadding();
    void setItemIconPaddingResource(@DimenRes int paddingResource);
    void setItemMaxLines(int itemMaxLines);
    int getItemMaxLines();
}

interface NavigationView.OnNavigationItemSelectedListener {
    boolean onNavigationItemSelected(@NonNull MenuItem menuItem);
}

Usage Example

NavigationView navigationView = findViewById(R.id.nav_view);
DrawerLayout drawer = findViewById(R.id.drawer_layout);

// Handle navigation selection
navigationView.setNavigationItemSelectedListener(menuItem -> {
    switch (menuItem.getItemId()) {
        case R.id.nav_dashboard:
            // Navigate to dashboard
            break;
        case R.id.nav_settings:
            // Navigate to settings
            break;
        case R.id.nav_logout:
            // Handle logout
            break;
    }
    
    // Close drawer
    drawer.closeDrawer(GravityCompat.START);
    return true;
});

// Setup header
View headerView = navigationView.getHeaderView(0);
TextView userName = headerView.findViewById(R.id.user_name);
userName.setText("John Doe");

// Set selected item
navigationView.setCheckedItem(R.id.nav_dashboard);

Navigation Rail View

Vertical navigation rail for tablet and desktop layouts.

class NavigationRailView extends NavigationBarView {
    NavigationRailView(Context context);
    NavigationRailView(Context context, AttributeSet attrs);
    
    // Header view
    void setHeaderView(View headerView);
    View getHeaderView();
    void addHeaderView(View headerView);
    void removeHeaderView();
    
    // Menu positioning
    int getMenuGravity();
    void setMenuGravity(int gravity);
    
    // Item size
    int getItemMinimumHeight();
    void setItemMinimumHeight(@Dimension int minHeight);
}

Navigation Rail Gravity Constants

public static final int GRAVITY_TOP = 48;
public static final int GRAVITY_CENTER = 17;
public static final int GRAVITY_BOTTOM = 80;

Usage Example

NavigationRailView navigationRail = findViewById(R.id.navigation_rail);

// Add header (like FAB)
FloatingActionButton fab = new FloatingActionButton(this);
fab.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_add));
navigationRail.setHeaderView(fab);

// Configure menu positioning
navigationRail.setMenuGravity(NavigationRailView.GRAVITY_CENTER);

// Handle selection
navigationRail.setOnItemSelectedListener(item -> {
    // Handle navigation selection
    return true;
});

Tab Layout

Horizontal tabs for organizing content into logical groups.

class TabLayout extends HorizontalScrollView {
    TabLayout(Context context);
    TabLayout(Context context, AttributeSet attrs);
    
    // Tab management
    Tab newTab();
    void addTab(Tab tab);
    void addTab(Tab tab, boolean setSelected);
    void addTab(Tab tab, int position);
    void addTab(Tab tab, int position, boolean setSelected);
    void removeTab(Tab tab);
    void removeTabAt(int position);
    void removeAllTabs();
    
    // Tab access
    int getTabCount();
    Tab getTabAt(int index);
    int getSelectedTabPosition();
    
    // Selection
    void selectTab(Tab tab);
    void selectTab(Tab tab, boolean updateIndicator);
    
    // Selection listeners
    void addOnTabSelectedListener(OnTabSelectedListener listener);
    void removeOnTabSelectedListener(OnTabSelectedListener listener);
    void clearOnTabSelectedListeners();
    
    // Layout behavior
    void setTabMode(int mode);
    int getTabMode();
    void setTabGravity(int gravity);
    int getTabGravity();
    
    // Styling
    void setSelectedTabIndicatorColor(@ColorInt int color);
    void setSelectedTabIndicatorHeight(int height);
    void setTabTextColors(@ColorInt int normalColor, @ColorInt int selectedColor);
    void setTabTextColors(ColorStateList textColor);
    ColorStateList getTabTextColors();
    void setTabIconTint(ColorStateList iconTint);
    void setTabIconTintResource(@ColorRes int iconTintResourceId);
    ColorStateList getTabIconTint();
    void setTabRippleColor(ColorStateList color);
    void setTabRippleColorResource(@ColorRes int tabRippleColorResourceId);
    ColorStateList getTabRippleColor();
    void setUnboundedRipple(boolean unboundedRipple);
    boolean getUnboundedRipple();
}

class TabLayout.Tab {
    CharSequence getText();
    Tab setText(CharSequence text);
    Tab setText(@StringRes int resId);
    Drawable getIcon();
    Tab setIcon(Drawable icon);
    Tab setIcon(@DrawableRes int resId);
    int getPosition();
    void select();
    boolean isSelected();
    Tab setTag(Object tag);
    Object getTag();
    Tab setCustomView(View view);
    Tab setCustomView(@LayoutRes int layoutResId);
    View getCustomView();
    BadgeDrawable getOrCreateBadge();
    BadgeDrawable getBadge();
    void removeBadge();
}

interface TabLayout.OnTabSelectedListener {
    void onTabSelected(TabLayout.Tab tab);
    void onTabUnselected(TabLayout.Tab tab);
    void onTabReselected(TabLayout.Tab tab);
}

Tab Layout Constants

public static final int MODE_SCROLLABLE = 0;
public static final int MODE_FIXED = 1;
public static final int MODE_AUTO = 2;

public static final int GRAVITY_FILL = 0;
public static final int GRAVITY_CENTER = 1;
public static final int GRAVITY_START = 8388611;

Usage Example

TabLayout tabLayout = findViewById(R.id.tab_layout);
ViewPager2 viewPager = findViewById(R.id.view_pager);

// Setup tabs manually
String[] tabTitles = {"Home", "Search", "Profile"};
for (String title : tabTitles) {
    TabLayout.Tab tab = tabLayout.newTab();
    tab.setText(title);
    tabLayout.addTab(tab);
}

// Configure appearance
tabLayout.setTabMode(TabLayout.MODE_FIXED);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

// Handle tab selection
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        // Handle tab selection
        viewPager.setCurrentItem(tab.getPosition());
    }
    
    @Override
    public void onTabUnselected(TabLayout.Tab tab) {}
    
    @Override
    public void onTabReselected(TabLayout.Tab tab) {}
});

Tab Layout Mediator

Links TabLayout with ViewPager2 for synchronized tab and page navigation.

class TabLayoutMediator {
    TabLayoutMediator(TabLayout tabLayout, ViewPager2 viewPager, TabConfigurationStrategy tabConfigurationStrategy);
    TabLayoutMediator(TabLayout tabLayout, ViewPager2 viewPager, boolean autoRefresh, TabConfigurationStrategy tabConfigurationStrategy);
    
    // Lifecycle
    void attach();
    void detach();
    boolean isAttached();
}

interface TabLayoutMediator.TabConfigurationStrategy {
    void onConfigureTab(@NonNull TabLayout.Tab tab, int position);
}

Usage Example

TabLayout tabLayout = findViewById(R.id.tab_layout);
ViewPager2 viewPager = findViewById(R.id.view_pager);

// Setup ViewPager with adapter
MyPagerAdapter adapter = new MyPagerAdapter(this);
viewPager.setAdapter(adapter);

// Link TabLayout with ViewPager2
new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> {
    switch (position) {
        case 0:
            tab.setText("Home");
            tab.setIcon(R.drawable.ic_home);
            break;
        case 1:
            tab.setText("Search");
            tab.setIcon(R.drawable.ic_search);
            break;
        case 2:
            tab.setText("Profile");
            tab.setIcon(R.drawable.ic_person);
            break;
    }
}).attach();

App Bar Layout

Vertical LinearLayout implementing scrolling behaviors for Material app bars.

class AppBarLayout extends LinearLayout {
    AppBarLayout(Context context);
    AppBarLayout(Context context, AttributeSet attrs);
    
    // Offset listeners
    void addOnOffsetChangedListener(OnOffsetChangedListener listener);
    void removeOnOffsetChangedListener(OnOffsetChangedListener listener);
    
    // Scroll behavior
    int getTotalScrollRange();
    void setExpanded(boolean expanded);
    void setExpanded(boolean expanded, boolean animate);
    
    // Lift state
    boolean isLifted();
    void setLifted(boolean lifted);
    void setLiftOnScroll(boolean liftOnScroll);
    boolean isLiftOnScroll();
}

interface AppBarLayout.OnOffsetChangedListener {
    void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset);
}

class AppBarLayout.LayoutParams extends LinearLayout.LayoutParams {
    AppBarLayout.LayoutParams(Context c, AttributeSet attrs);
    AppBarLayout.LayoutParams(int width, int height);
    AppBarLayout.LayoutParams(int width, int height, float weight);
    AppBarLayout.LayoutParams(ViewGroup.LayoutParams p);
    AppBarLayout.LayoutParams(MarginLayoutParams source);
    AppBarLayout.LayoutParams(LinearLayout.LayoutParams source);
    
    void setScrollFlags(int flags);
    int getScrollFlags();
    void setScrollInterpolator(Interpolator interpolator);
    Interpolator getScrollInterpolator();
}

Scroll Flags Constants

public static final int SCROLL_FLAG_SCROLL = 0x1;
public static final int SCROLL_FLAG_EXIT_UNTIL_COLLAPSED = 0x2;
public static final int SCROLL_FLAG_ENTER_ALWAYS = 0x4;
public static final int SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED = 0x8;
public static final int SCROLL_FLAG_SNAP = 0x10;
public static final int SCROLL_FLAG_SNAP_MARGINS = 0x20;

Usage Example

AppBarLayout appBarLayout = findViewById(R.id.app_bar_layout);

// Listen for scroll changes
appBarLayout.addOnOffsetChangedListener((appBarLayout1, verticalOffset) -> {
    float alpha = 1.0f - Math.abs(verticalOffset) / (float) appBarLayout1.getTotalScrollRange();
    // Update UI based on scroll offset
});

// Control expanded state
appBarLayout.setExpanded(true, true);

// Configure lift on scroll
appBarLayout.setLiftOnScroll(true);

Collapsing Toolbar Layout

Wrapper for Toolbar implementing a collapsing app bar effect.

class CollapsingToolbarLayout extends FrameLayout {
    CollapsingToolbarLayout(Context context);
    CollapsingToolbarLayout(Context context, AttributeSet attrs);
    
    // Title
    void setTitle(CharSequence title);
    CharSequence getTitle();
    
    // Scrim drawables
    void setContentScrim(Drawable drawable);
    Drawable getContentScrim();
    void setStatusBarScrim(Drawable drawable);
    Drawable getStatusBarScrim();
    
    // Title text appearance
    void setCollapsedTitleTextAppearance(@StyleRes int resId);
    void setExpandedTitleTextAppearance(@StyleRes int resId);
    
    // Title colors
    void setCollapsedTitleTextColor(@ColorInt int color);
    void setExpandedTitleTextColor(@ColorInt int color);
    void setCollapsedTitleTextColor(ColorStateList colors);
    void setExpandedTitleTextColor(ColorStateList colors);
    
    // Title margins
    void setExpandedTitleMargin(int start, int top, int end, int bottom);
    void setExpandedTitleMarginStart(int margin);
    int getExpandedTitleMarginStart();
    void setExpandedTitleMarginTop(int margin);
    int getExpandedTitleMarginTop();
    void setExpandedTitleMarginEnd(int margin);
    int getExpandedTitleMarginEnd();
    void setExpandedTitleMarginBottom(int margin);
    int getExpandedTitleMarginBottom();
    
    // Parallax
    void setTitleCollapseMode(int titleCollapseMode);
    int getTitleCollapseMode();
}

Usage Example

CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_toolbar);
Toolbar toolbar = findViewById(R.id.toolbar);

// Setup with ActionBar
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

// Configure collapsing toolbar
collapsingToolbar.setTitle("Article Title");
collapsingToolbar.setContentScrim(ContextCompat.getDrawable(this, R.color.primary));
collapsingToolbar.setStatusBarScrim(ContextCompat.getDrawable(this, R.color.primary_dark));

Material Toolbar

Material Design themed toolbar with enhanced styling support.

class MaterialToolbar extends Toolbar {
    MaterialToolbar(Context context);
    MaterialToolbar(Context context, AttributeSet attrs);
    
    // Navigation icon
    void setNavigationIcon(Drawable drawable);
    void setNavigationIconTint(@ColorInt int color);
    Integer getNavigationIconTint();
}

Usage Example

MaterialToolbar toolbar = findViewById(R.id.toolbar);

// Setup as ActionBar
setSupportActionBar(toolbar);

// Configure navigation
toolbar.setNavigationIcon(R.drawable.ic_menu);
toolbar.setNavigationIconTint(Color.WHITE);
toolbar.setNavigationOnClickListener(v -> {
    // Handle navigation click (e.g., open drawer)
});

// Set title and subtitle
toolbar.setTitle("App Name");
toolbar.setSubtitle("Current Section");

Bottom App Bar

Material Design bottom app bar with FAB integration.

class BottomAppBar extends Toolbar {
    BottomAppBar(Context context);
    BottomAppBar(Context context, AttributeSet attrs);
    
    // FAB alignment
    void setFabAlignmentMode(int mode);
    int getFabAlignmentMode();
    
    // FAB animation
    void setFabAnimationMode(int mode);
    int getFabAnimationMode();
    
    // Hide on scroll
    void setHideOnScroll(boolean hideOnScroll);
    boolean getHideOnScroll();
    
    // FAB cradle configuration
    void setCradleVerticalOffset(float verticalOffset);
    float getCradleVerticalOffset();
    void setFabCradleMargin(float margin);
    float getFabCradleMargin();
    void setFabCradleRoundedCornerRadius(float radius);
    float getFabCradleRoundedCornerRadius();
}

Bottom App Bar Constants

public static final int FAB_ALIGNMENT_MODE_CENTER = 0;
public static final int FAB_ALIGNMENT_MODE_END = 1;

public static final int FAB_ANIMATION_MODE_SCALE = 0;
public static final int FAB_ANIMATION_MODE_SLIDE = 1;

Usage Example

BottomAppBar bottomAppBar = findViewById(R.id.bottom_app_bar);
FloatingActionButton fab = findViewById(R.id.fab);

// Configure FAB alignment
bottomAppBar.setFabAlignmentMode(BottomAppBar.FAB_ALIGNMENT_MODE_CENTER);
bottomAppBar.setFabAnimationMode(BottomAppBar.FAB_ANIMATION_MODE_SLIDE);

// Configure cradle
bottomAppBar.setFabCradleMargin(16f);
bottomAppBar.setFabCradleRoundedCornerRadius(8f);

// Handle menu clicks
bottomAppBar.setOnMenuItemClickListener(item -> {
    switch (item.getItemId()) {
        case R.id.menu_search:
            // Handle search
            return true;
        case R.id.menu_more:
            // Handle more options
            return true;
        default:
            return false;
    }
});

// Animate FAB alignment
bottomAppBar.setFabAlignmentMode(BottomAppBar.FAB_ALIGNMENT_MODE_END);

Navigation Bar View (Base Class)

Base class for bottom navigation and navigation rail with common functionality.

abstract class NavigationBarView extends FrameLayout {
    // Item selection
    void setOnItemSelectedListener(OnItemSelectedListener listener);
    void setOnItemReselectedListener(OnItemReselectedListener listener);
    
    // Menu and selection
    Menu getMenu();
    void setSelectedItemId(@IdRes int itemId);
    int getSelectedItemId();
    
    // Badges
    void setBadgeFor(@IdRes int menuItemId, BadgeDrawable badgeDrawable);
    BadgeDrawable getOrCreateBadge(@IdRes int menuItemId);
    BadgeDrawable getBadge(@IdRes int menuItemId);
    void removeBadge(@IdRes int menuItemId);
    
    // Item styling
    void setItemIconTintList(ColorStateList tint);
    ColorStateList getItemIconTintList();
    void setItemTextColor(ColorStateList textColor);
    ColorStateList getItemTextColor();
    void setItemIconSize(@Dimension int size);
    int getItemIconSize();
    void setItemIconSizeRes(@DimenRes int sizeRes);
    void setItemTextAppearanceInactive(@StyleRes int textAppearanceRes);
    int getItemTextAppearanceInactive();
    void setItemTextAppearanceActive(@StyleRes int textAppearanceRes);
    int getItemTextAppearanceActive();
    void setItemBackgroundResource(@DrawableRes int backgroundRes);
    void setItemBackground(Drawable background);
    Drawable getItemBackground();
    
    // Label visibility
    void setLabelVisibilityMode(int mode);
    int getLabelVisibilityMode();
}

interface NavigationBarView.OnItemSelectedListener {
    boolean onNavigationItemSelected(@NonNull MenuItem item);
}

interface NavigationBarView.OnItemReselectedListener {
    void onNavigationItemReselected(@NonNull MenuItem item);
}

Label Visibility Constants

public static final int LABEL_VISIBILITY_AUTO = -1;
public static final int LABEL_VISIBILITY_SELECTED = 0;
public static final int LABEL_VISIBILITY_LABELED = 1;
public static final int LABEL_VISIBILITY_UNLABELED = 2;

Search Components

Search Bar

A floating search field with affordances for search and navigation functionality.

public class SearchBar extends Toolbar {
    public SearchBar(Context context);
    public SearchBar(Context context, AttributeSet attrs);
    
    // Text content
    public void setText(@Nullable CharSequence text);
    public void setText(@StringRes int textResId);
    public CharSequence getText();
    public void clearText();
    
    // Hint text
    public void setHint(@Nullable CharSequence hint);
    public void setHint(@StringRes int hintResId);
    public CharSequence getHint();
    
    // Text alignment
    public void setTextCentered(boolean textCentered);
    public boolean getTextCentered();
    
    // Navigation
    public void setNavigationOnClickListener(OnClickListener listener);
    public void setNavigationIcon(@Nullable Drawable navigationIcon);
    public void setNavigationIcon(@DrawableRes int navigationIconRes);
    
    // Menu inflation
    public void inflateMenu(@MenuRes int resId);
    
    // Lift on scroll behavior  
    public void setLiftOnScroll(boolean liftOnScroll);
    public boolean isLiftOnScroll();
    
    // Center view
    public void setCenterView(@Nullable View view);
    public View getCenterView();
}

Search View

A full-screen search interface that works together with SearchBar for rich search experiences.

public class SearchView extends FrameLayout {
    public SearchView(Context context);
    public SearchView(Context context, AttributeSet attrs);
    
    // Search bar setup
    public void setupWithSearchBar(@Nullable SearchBar searchBar);
    
    // Text content
    public void setText(@Nullable CharSequence text);
    public void setText(@StringRes int textResId);
    public CharSequence getText();
    public void clearText();
    
    // Hint text
    public void setHint(@Nullable CharSequence hint);
    public void setHint(@StringRes int hintResId);
    public CharSequence getHint();
    
    // Visibility and animation
    public void show();
    public void hide();
    public boolean isShowing();
    
    // Status bar color
    public void setStatusBarSpacerColor(@ColorInt int color);
    public int getStatusBarSpacerColor();
    public void setStatusBarSpacerEnabled(boolean enabled);
    public boolean isStatusBarSpacerEnabled();
    
    // Menu setup
    public void inflateMenu(@MenuRes int menuResId);
    public void setOnMenuItemClickListener(@Nullable OnMenuItemClickListener listener);
    
    // Listeners
    public void addTransitionListener(@NonNull TransitionListener transitionListener);
    public void removeTransitionListener(@NonNull TransitionListener transitionListener);
    
    public interface TransitionListener {
        void onStateChanged(@NonNull SearchView searchView, @NonNull TransitionState previousState, @NonNull TransitionState newState);
    }
    
    public enum TransitionState {
        HIDING, HIDDEN, SHOWING, SHOWN
    }
}

Usage Example:

// Setup SearchBar
SearchBar searchBar = findViewById(R.id.search_bar);
searchBar.setHint("Search products...");
searchBar.setNavigationOnClickListener(v -> {
    // Handle navigation click
});

// Setup SearchView
SearchView searchView = findViewById(R.id.search_view);
searchView.setupWithSearchBar(searchBar);
searchView.inflateMenu(R.menu.search_menu);

// Add search functionality
EditText searchEditText = searchView.findViewById(R.id.search_edit_text);
searchEditText.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        performSearch(s.toString());
    }
    // ... other TextWatcher methods
});

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