Label | TextView | setText, setTextSize, setTypeface, setTextColor |
Button | MaterialButton | setText, setOnClickListener via JNI callback bridge |
VStack | LinearLayout | orientation: VERTICAL, LayoutParams with margins |
HStack | LinearLayout | orientation: HORIZONTAL |
ZStack | FrameLayout | Children positioned with LayoutParams gravity |
Image | ImageView | setScaleType mapped from ContentMode |
TextField | EditText | setHint, setInputType, addTextChangedListener |
ScrollView | ScrollView / HorizontalScrollView | Depends on scroll axis |
Spacer | Space | LayoutParams with weight=1 |
Toggle | SwitchMaterial | setChecked, setOnCheckedChangeListener; Switch on older API |
Checkbox | CheckBox | android.widget.CheckBox; setOnCheckedChangeListener |
RadioGroup | RadioGroup + RadioButton | android.widget.RadioGroup; setOnCheckedChangeListener |
Slider | Slider (Material) | com.google.android.material.slider.Slider; addOnChangeListener |
Stepper | Composed LinearLayout | Custom: MaterialButton("-") + TextView + MaterialButton("+") |
SegmentedControl | MaterialButtonToggleGroup | com.google.android.material.button.MaterialButtonToggleGroup (single selection) |
NavigationStack | FragmentManager + back stack | FragmentTransaction.replace + addToBackStack() |
NavigationLink | View.setOnClickListener | Calls FragmentTransaction.replace on tap |
TabView | BottomNavigationView | com.google.android.material.bottomnavigation.BottomNavigationView + FragmentContainerView |
NavigationSplitView | SlidingPaneLayout | androidx.slidingpanelayout.widget.SlidingPaneLayout |
Toolbar | MaterialToolbar | com.google.android.material.appbar.MaterialToolbar; MenuItem per item |
ProgressView | LinearProgressIndicator / CircularProgressIndicator | Material com.google.android.material.progressindicator.*; setProgress |
ActivityIndicator | CircularProgressIndicator | setIndeterminate(true); setVisibility via is_animating |
Alert | MaterialAlertDialogBuilder | com.google.android.material.dialog.MaterialAlertDialogBuilder |
Picker | Spinner | android.widget.Spinner with ArrayAdapter |
IconButton | ImageButton | android.widget.ImageButton; setImageResource / setImageDrawable |
ListView | RecyclerView | androidx.recyclerview.widget.RecyclerView with LinearLayoutManager |
SecureField | EditText | `setInputType(TYPE_CLASS_TEXT |
SearchField | SearchView | android.widget.SearchView; setOnQueryTextListener |
TextArea | EditText | `setInputType(TYPE_CLASS_TEXT |
TextEditor | EditText | Multi-line, monospace font; line numbers via custom LinearLayout overlay |
DatePicker | MaterialDatePicker | com.google.android.material.datepicker.MaterialDatePicker dialog |
TimePicker | MaterialTimePicker | com.google.android.material.timepicker.MaterialTimePicker dialog |
Grid | RecyclerView | GridLayoutManager(context, spanCount) |
Form | RecyclerView | Section headers + field rows with ConcatAdapter |
AsyncImage | ImageView | ImageView + Coil / Glide / Picasso for async load + caching |
RichText | TextView | SpannableStringBuilder with StyleSpan, ForegroundColorSpan, URLSpan |
LinkButton | MaterialButton | setOnClickListener opens URL via Intent(ACTION_VIEW, Uri.parse(url)) |
MenuButton | MaterialButton + PopupMenu | android.widget.PopupMenu; destructive items styled red |
ToggleButton | MaterialButton | android.widget.ToggleButton or MaterialButton with toggle state |
Sheet | BottomSheetDialogFragment | com.google.android.material.bottomsheet.BottomSheetDialogFragment; peekHeight from detents |
Popover | PopupWindow | android.widget.PopupWindow; shown relative to anchor view |
ConfirmationDialog | MaterialAlertDialogBuilder | Two buttons (confirm + cancel); positiveButton style for confirm_style |
Snackbar | Snackbar | com.google.android.material.snackbar.Snackbar; setDuration, setAction |
Card | MaterialCardView | com.google.android.material.card.MaterialCardView; cardElevation, strokeWidth |
Surface | CardView | androidx.cardview.widget.CardView or plain ViewGroup with background |
Divider | View | height=1dp, background=color, or DividerItemDecoration in lists |
GlassBackground | RenderEffect (API 31+) | RenderEffect.createBlurEffect() on API 31+; translucent solid fallback on older |
Circle | Custom View | onDraw: canvas.drawCircle(cx, cy, radius, paint) |
Rectangle | Custom View | onDraw: canvas.drawRect(rect, paint) |
RoundedRectangle | Custom View | onDraw: canvas.drawRoundRect(rect, rx, ry, paint) |
Capsule | Custom View | onDraw: canvas.drawRoundRect with rx = min(w,h)/2 |
Canvas | Custom View | onDraw replays CanvasOp array via android.graphics.Canvas + Paint |
PathView | Custom View | android.graphics.Path (stub) |
MapView | SupportMapFragment | Google Maps SDK com.google.android.gms.maps; LatLng, CameraUpdateFactory |
ChartView | MPAndroidChart | com.github.PhilJay:MPAndroidChart; BarChart/LineChart/PieChart per chart_type |
WebViewComponent | WebView | android.webkit.WebView; loadUrl(url) |
ColorPicker | Custom dialog | No native; third-party or custom AlertDialog with ColorPicker view |
VideoPlayer | PlayerView | androidx.media3.ui.PlayerView (Media3/ExoPlayer) |
Tooltip | TooltipCompat | androidx.appcompat.widget.TooltipCompat.setTooltipText(view, text) |