Styling
You can style Voltra components on Android using React Native-style style props. These properties are automatically converted to Jetpack Compose Glance modifiers.
For Android system-aware colors, use AndroidDynamicColors from voltra/android instead of snapshotting palette values in JavaScript.
Android widgets are built using Jetpack Compose Glance, which has a significantly more limited styling API compared to standard Compose or SwiftUI. Many common React Native style properties are either not supported or have limited support.
Supported Properties
The following React Native style properties are supported on Android:
Layout
width,height- Fixed dimensions (number values in dp) or"100%"to fill available space.flex,flexGrow- Flex weight. When > 0, the component will take up a proportional amount of space in its parent container (maps to.defaultWeight()in Glance).padding- Uniform padding on all edges.paddingTop,paddingBottom,paddingLeft,paddingRight- Individual edge padding.paddingHorizontal,paddingVertical- Horizontal and vertical padding.visibility- Controls component visibility ("visible","hidden", or"invisible").
Visual Style
backgroundColor- Background color (hex strings, color names, orAndroidDynamicColors.*tokens).borderRadius- Corner radius value. Note: Requires Android 12+ (API 31). On older versions, this property is ignored.
Text
fontSize- Font size in sp.fontWeight- Supports"normal"and"bold".fontFamily- Font family name. Built-in values:"monospace","serif","sans-serif","cursive". For custom fonts, see Custom Fonts.color- Text color (literal colors orAndroidDynamicColors.*).textDecorationLine- Supports"underline"and"line-through".textAlign- Alignment of text within the component ("left","center","right").numberOfLines- Limits the number of lines displayed.
Image Specific
In addition to general styles, Image components support:
resizeMode(orcontentScale) -"cover","contain","stretch", or"center".alpha- Opacity of the image (0.0 to 1.0).tintColor- Applies a color filter to the image.
Dynamic colors
Android widgets can use semantic Material color roles that resolve through native GlanceTheme.colors.* values during rendering.
This is the preferred approach when you want widgets to follow Android's dynamic palette even when the app is not running. See Dynamic Colors for the full role list and server-rendering behavior.
Limitations
The following properties are NOT supported on Android due to Glance limitations:
- Margins:
margin,marginTop, etc. are currently ignored. Usepaddingon parent containers orSpacercomponents instead. - Borders:
borderWidthandborderColorare not yet implemented. - Shadows:
shadowColor,shadowOffset,shadowOpacity, andshadowRadiusare not supported. - Positioning: Absolute positioning (
top,left,zIndex) is not supported. Use stack alignments and spacers. - Transforms:
transform(rotate, scale, etc.) is not supported. - Opacity: The general
style.opacityproperty is not supported (except for thealphaprop onImage). - Dimensions:
minWidth,maxWidth,minHeight,maxHeight, andaspectRatioare not supported. - Text Effects:
letterSpacing,fontVariant, and customlineHeightare not supported.
