Td-header-sp-top-widget language theme newspaper
Do you need your surveys to match your organization’s branding? Qualtrics makes it easy! Simply brand a survey yourself or request a static theme from the Qualtrics design team. Show There are two types of branded themes supported by Qualtrics:
Qtip: If you’ve created a dynamic theme or requested a static theme and your request has been completed, you can apply the theme in the Look and feel menu. See for more information on using your custom theme. Dynamic Themescan create dynamic themes the whole brand can use, or they can create dynamic themes for specific user types and divisions. If you’re a Brand Administrator, check out the Themes tab to start building! Example Dynamic ThemesView example 1 theme here.View example 2 theme here.Qtip: Dynamic themes also allow . Unfortunately, Qualtrics Support cannot provide assistance with custom coding. However, you can always consult the Developer Corner on the Qualtrics Community if you have any questions about custom CSS. Static ThemesAttention: Static themes are a much older method of theme creation. We only recommend using this option if you can’t achieve what you need by creating your own dynamic theme or using . Only can submit design requests. Reach out to your if you would like them to submit a request on your behalf. Example Static ThemesView example 1 theme here. To request a new static theme, update your existing theme, add or modify an , or report an issue with a theme we’ve built for you, login to the Customer Success Hub below and select the Custom Theme Request / Update tile. Submit a Design RequestAttention: If you are not a Brand Administrator, you will not have access to the Custom Theme Request / Update tile in the Customer Success Hub. If you would like to request a new static theme, update your existing theme, add or modify an , or report an issue with a theme we’ve built for you, you will need to reach out to your so they can contact the Theme Design team on your behalf. Custom Projects with Engineering ServicesNeed something more custom? Our Engineering Services team would love to help. Contact your to learn more. Jetpack Compose offers an implementation of Material Design 3, the next evolution of Material Design. Material 3 includes updated theming, components and Material You personalization features like dynamic color, and is designed to be cohesive with the new visual style and system UI on Android 12 and above. Below, we demonstrate the Material Design 3 implementation using the Reply sample app as an example. The Reply sample is based entirely on Material Design 3. Figure 1. Reply sample app using Material Design 3DependencyTo start using Material 3 in your Compose app, add the Compose Material 3 dependency to your MaterialTheme( ) { }7 files:
Once the dependency is added, you can start adding Material Design systems, including color, typography, and shape, to your apps. Experimental APIsSome M3 APIs are considered experimental. In such cases you need to opt in at the function or file level using the MaterialTheme( ) { }8 annotation: // import androidx.compose.material3.ExperimentalMaterial3Api @OptIn(ExperimentalMaterial3Api::class) @Composable fun AppComposable() { }Material themingAn M3 theme contains the following subsystems: color scheme, typography and shapes. When you customize these values, your changes are automatically reflected in the M3 components you use to build your app. Figure 2. Subsystems of Material Design: color, typography and shapesJetpack Compose implements these concepts with the M3 MaterialTheme( ) { }9 composable: MaterialTheme( ) { }To theme your application content, define the color scheme, typography, and shapes specific to your app. Color schemeThe foundation of a color scheme is the set of five key colors. Each of these colors relate to a tonal palette of 13 tones, which are used by Material 3 components. For example, this is the color scheme for light theme for Reply: Figure 3. Reply sample app light color schemeRead more about the Color scheme and color roles. Generate color schemesWhile you can create a custom val md_theme_light_primary = Color(0xFF476810) val md_theme_light_onPrimary = Color(0xFFFFFFFF) val md_theme_light_primaryContainer = Color(0xFFC7F089) // .. // .. val md_theme_dark_primary = Color(0xFFACD370) val md_theme_dark_onPrimary = Color(0xFF213600) val md_theme_dark_primaryContainer = Color(0xFF324F00) // .. // .. 0 manually, it’s often easier to generate one using source colors from your brand. The Material Theme Builder tool allows you to do this, and optionally export Compose theming code. The following files are generated:
val md_theme_light_primary = Color(0xFF476810) val md_theme_light_onPrimary = Color(0xFFFFFFFF) val md_theme_light_primaryContainer = Color(0xFFC7F089) // .. // .. val md_theme_dark_primary = Color(0xFFACD370) val md_theme_dark_onPrimary = Color(0xFF213600) val md_theme_dark_primaryContainer = Color(0xFF324F00) // .. // ..
private val LightColorScheme = lightColorScheme( )
private val DarkColorScheme = darkColorScheme( )
@Composable
fun ReplyTheme( ) { }To support light and dark themes, use val md_theme_light_primary = Color(0xFF476810) val md_theme_light_onPrimary = Color(0xFFFFFFFF) val md_theme_light_primaryContainer = Color(0xFFC7F089) // .. // .. val md_theme_dark_primary = Color(0xFFACD370) val md_theme_dark_onPrimary = Color(0xFF213600) val md_theme_dark_primaryContainer = Color(0xFF324F00) // .. // .. 3. Based on the system setting, define which color scheme to use: light or dark. Dynamic color schemesDynamic color is the key part of Material You, in which an algorithm derives custom colors from a user’s wallpaper to be applied to their apps and system UI. This color palette is used as the starting point to generate light and dark color schemes. ![Reply sample app dynamic theming from wallpaper (left) and default app theming (right) ](https://https://i0.wp.com/developer.android.com/static/images/jetpack/compose/m3-dynamic.png) Figure 4. Reply sample app dynamic theming from wallpaper (left) and default app theming (right) Dynamic color is available on Android 12 and above. If dynamic color is available, you can set up a dynamic val md_theme_light_primary = Color(0xFF476810) val md_theme_light_onPrimary = Color(0xFFFFFFFF) val md_theme_light_primaryContainer = Color(0xFFC7F089) // .. // .. val md_theme_dark_primary = Color(0xFFACD370) val md_theme_dark_onPrimary = Color(0xFF213600) val md_theme_dark_primaryContainer = Color(0xFF324F00) // .. // .. 0. If not, you should fall back to using a custom light or dark val md_theme_light_primary = Color(0xFF476810) val md_theme_light_onPrimary = Color(0xFFFFFFFF) val md_theme_light_primaryContainer = Color(0xFFC7F089) // .. // .. val md_theme_dark_primary = Color(0xFFACD370) val md_theme_dark_onPrimary = Color(0xFF213600) val md_theme_dark_primaryContainer = Color(0xFF324F00) // .. // .. 0. val md_theme_light_primary = Color(0xFF476810) val md_theme_light_onPrimary = Color(0xFFFFFFFF) val md_theme_light_primaryContainer = Color(0xFFC7F089) // .. // .. val md_theme_dark_primary = Color(0xFFACD370) val md_theme_dark_onPrimary = Color(0xFF213600) val md_theme_dark_primaryContainer = Color(0xFF324F00) // .. // .. 0 provides builder functions to create a dynamic or color scheme: // Dynamic color is available on Android 12+ val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S val colors = when { }Color usageYou can access Material theme colors in your app via val md_theme_light_primary = Color(0xFF476810) val md_theme_light_onPrimary = Color(0xFFFFFFFF) val md_theme_light_primaryContainer = Color(0xFFC7F089) // .. // .. val md_theme_dark_primary = Color(0xFFACD370) val md_theme_dark_onPrimary = Color(0xFF213600) val md_theme_dark_primaryContainer = Color(0xFF324F00) // .. // .. 7: Text( )Each color role can be used in a variety of places depending on the component’s state, prominence, and emphasis.
The Reply sample app design uses on-primary-container color on top of primary-container to put emphasis on the selected item. Figure 5. Primary container and text fields with on-primary-container color.Card( ) { }Here you can see in the Reply Navigation drawer how secondary and tertiary container colors are used in contrast to create emphasis and accent. Figure 6. Tertiary-container and on-tertiary-container combination for Floating Action button.TypographyMaterial Design 3 defines a type scale, including text styles that have been adapted from Material Design 2. The naming and grouping have been simplified to: display, headline, title, body, and label, with large, medium, and small sizes for each. Figure 7. Default typography scale for Material Design 3 M3 Default Font Size/Line Heightval md_theme_light_primary = Color(0xFF476810) val md_theme_light_onPrimary = Color(0xFFFFFFFF) val md_theme_light_primaryContainer = Color(0xFFC7F089) // .. // .. val md_theme_dark_primary = Color(0xFFACD370) val md_theme_dark_onPrimary = Color(0xFF213600) val md_theme_dark_primaryContainer = Color(0xFF324F00) // .. // .. 8 val md_theme_light_primary = Color(0xFF476810) val md_theme_light_onPrimary = Color(0xFFFFFFFF) val md_theme_light_primaryContainer = Color(0xFFC7F089) // .. // .. val md_theme_dark_primary = Color(0xFFACD370) val md_theme_dark_onPrimary = Color(0xFF213600) val md_theme_dark_primaryContainer = Color(0xFF324F00) // .. // .. 9 private val LightColorScheme = lightColorScheme( )
private val DarkColorScheme = darkColorScheme( )
@Composable
fun ReplyTheme( ) { }0 private val LightColorScheme = lightColorScheme( )
private val DarkColorScheme = darkColorScheme( )
@Composable
fun ReplyTheme( ) { }1 private val LightColorScheme = lightColorScheme( )
private val DarkColorScheme = darkColorScheme( )
@Composable
fun ReplyTheme( ) { }2 private val LightColorScheme = lightColorScheme( )
private val DarkColorScheme = darkColorScheme( )
@Composable
fun ReplyTheme( ) { }3 private val LightColorScheme = lightColorScheme( )
private val DarkColorScheme = darkColorScheme( )
@Composable
fun ReplyTheme( ) { }4 private val LightColorScheme = lightColorScheme( )
private val DarkColorScheme = darkColorScheme( )
@Composable
fun ReplyTheme( ) { }5 private val LightColorScheme = lightColorScheme( )
private val DarkColorScheme = darkColorScheme( )
@Composable
fun ReplyTheme( ) { }6 private val LightColorScheme = lightColorScheme( )
private val DarkColorScheme = darkColorScheme( )
@Composable
fun ReplyTheme( ) { }7 private val LightColorScheme = lightColorScheme( )
private val DarkColorScheme = darkColorScheme( )
@Composable
fun ReplyTheme( ) { }8 private val LightColorScheme = lightColorScheme( )
private val DarkColorScheme = darkColorScheme( )
@Composable
fun ReplyTheme( ) { }9 // Dynamic color is available on Android 12+ val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S val colors = when { }0 // Dynamic color is available on Android 12+ val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S val colors = when { }1 // Dynamic color is available on Android 12+ val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S val colors = when { }2 // Dynamic color is available on Android 12+ val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S val colors = when { }3 // Dynamic color is available on Android 12+ val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S val colors = when { }4 // Dynamic color is available on Android 12+ val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S val colors = when { }5 // Dynamic color is available on Android 12+ val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S val colors = when { }6 // Dynamic color is available on Android 12+ val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S val colors = when { }7 // Dynamic color is available on Android 12+ val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S val colors = when { }8 // Dynamic color is available on Android 12+ val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S val colors = when { }9 Text( )0 Text( )1 Text( )2 // Dynamic color is available on Android 12+ val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S val colors = when { }5 Text( )4 Text( )5 Text( )6 Text( )7 Define typographyCompose provides the M3 Text( )8 class — along with the existing Text( )9 and font-related classes — to model the Material 3 type scale. The Text( )8 constructor offers defaults for each style so you can omit any parameters you do not want to customize: val replyTypography = Typography( )
// .. Figure 8. Body large, body medium, and label medium for different typography usage.Your product will likely not need all 15 default styles from the Material Design type scale. In this example, five sizes are chosen for a reduced set while the rest are omitted. You can customize your typography by changing default values of Text( )9 and font-related properties like Card( ) { }2 and Card( ) { }3. bodyLarge = TextStyle( ),Once you have defined your Text( )8, pass it to the M3 MaterialTheme( ) { }9: // import androidx.compose.material3.ExperimentalMaterial3Api @OptIn(ExperimentalMaterial3Api::class) @Composable fun AppComposable() { }0 Use text stylesYou can retrieve the typography provided to the M3 MaterialTheme( ) { }9 composable by using Card( ) { }7: // import androidx.compose.material3.ExperimentalMaterial3Api @OptIn(ExperimentalMaterial3Api::class) @Composable fun AppComposable() { }1 You can read more about the Material guidelines on applying typography. ShapesMaterial surfaces can be displayed in different shapes. Shapes direct attention, identify components, communicate state, and express brand. The shape scale defines the style of container corners, offering a range of roundedness from square to fully circular. Define shapesCompose provides the M3 Card( ) { }8 class with expanded parameters to support new M3 shapes. The M3 shape scale is more like the type scale, enabling an expressive range of shapes across the UI. There are different sizes of shapes:
By default, each shape has a default value, but you can override those: // import androidx.compose.material3.ExperimentalMaterial3Api @OptIn(ExperimentalMaterial3Api::class) @Composable fun AppComposable() { }2 Once you have defined your Card( ) { }8, you can pass it to the M3 MaterialTheme( ) { }9: // import androidx.compose.material3.ExperimentalMaterial3Api @OptIn(ExperimentalMaterial3Api::class) @Composable fun AppComposable() { }3 Use shapesYou can customize the shape scale for all components in the MaterialTheme( ) { }9 or you can do it on a per component basis. Apply medium and large shape with default values: // import androidx.compose.material3.ExperimentalMaterial3Api @OptIn(ExperimentalMaterial3Api::class) @Composable fun AppComposable() { }4 Figure 9. Medium shape for Card and Large shape for Floating action button in Reply sample appThere are two other shapes — val replyTypography = Typography( )
// ..2 and val replyTypography = Typography( )
// ..3 — which are part of Compose. Rectangle shape is with no border radius and circle shape shows full circled edges: // import androidx.compose.material3.ExperimentalMaterial3Api @OptIn(ExperimentalMaterial3Api::class) @Composable fun AppComposable() { }5 The examples below demonstrate some of the components with default shape values applied to them: Figure 10. Default shapes values for all Material 3 components.You can read more about the Material guidelines on applying shape. EmphasisEmphasis in M3 is provided using variations of color and its on-color combinations. In M3, there are two ways to add emphasis to your UI:
// import androidx.compose.material3.ExperimentalMaterial3Api @OptIn(ExperimentalMaterial3Api::class) @Composable fun AppComposable() { }6 ElevationMaterial 3 represents elevation mainly using tonal color overlays. This is a new way to differentiate containers and surfaces from each other — increasing tonal elevation uses a more prominent tone — in addition to shadows. Figure 12. Tonal elevation with shadow elevationEElevation overlays in dark themes have also changed to tonal color overlays in Material 3. The overlay color comes from the primary color slot. Figure 13. Shadow elevation versus Tonal elevation in Material Design 3The M3 — the backing composable behind most M3 components — includes support for both tonal and shadow elevation: // import androidx.compose.material3.ExperimentalMaterial3Api @OptIn(ExperimentalMaterial3Api::class) @Composable fun AppComposable() { }7 Material componentsMaterial Design comes with a rich set of Material components (such as buttons, chips, cards, navigation bar) which already follow Material Theming and help you make beautiful Material Design apps. You can start using components with default properties right out of the box. // import androidx.compose.material3.ExperimentalMaterial3Api @OptIn(ExperimentalMaterial3Api::class) @Composable fun AppComposable() { }8 M3 provides many versions of the same components to be used in different roles according to emphasis and attention. Figure 14. Button emphasis from FAB, Primary down to Text button
// import androidx.compose.material3.ExperimentalMaterial3Api @OptIn(ExperimentalMaterial3Api::class) @Composable fun AppComposable() { }9
MaterialTheme( ) { }0
MaterialTheme( ) { }1 You can read more about Material buttons and other components. Material 3 provides a wide variety of component suites such as Buttons, App bars, Navigation components that are specifically designed for different use cases and screen sizes. Navigation componentsMaterial also provides several navigation components that help you implement navigation, depending on different screen sizes and states. val replyTypography = Typography( )
// ..4 is used for compact devices when you want to target 5 or less destinations: MaterialTheme( ) { }2 val replyTypography = Typography( )
// ..5 is used for small-to-medium size tablets or phones in landscape mode. It provides ergonomics to users and improves the user experience for those devices. MaterialTheme( ) { }3 Figure 15. Reply Showcase ofval replyTypography = Typography( )
// ..6 (Left) and val replyTypography = Typography( )
// ..5 (Right) Reply using both in default theming to provide immersive user experience for all device sizes. val replyTypography = Typography( )
// ..8 is used for medium-to-large size tablets where you have enough space to show detail. You can use both val replyTypography = Typography( )
// ..9 or bodyLarge = TextStyle( ),0 along with val replyTypography = Typography( )
// ..5. MaterialTheme( ) { }4 Figure 16. Reply showcase of permanent navigation drawerNavigation options enhance the user experience, ergonomics and reachability. You can learn more about Material navigation components in the Compose adaptive codelab. Customize a component's themingM3 encourages personalization and flexibility. All components have default colors applied to them but expose flexible APIs to customize their colors if required. Most components, like cards and buttons, provide a default object exposing color and elevation interfaces that can be modified to customize your component: MaterialTheme( ) { }5 You can read more about customizing Material 3. System UISome aspects of Material You come from the new visual style and system UI on Android 12 and above. Two key areas where there are changes are ripple and overscroll. No additional work is required to implement these changes. RippleRipple now uses a subtle sparkle to illuminate surfaces when pressed. Compose Material Ripple uses a platform RippleDrawable under the hood on Android, so sparkle ripple is available on Android 12 and above for all Material components. Figure 17. Ripple in M2 versus M3OverscrollOverscroll now uses a at the edge of scrolling containers. Stretch overscroll is on by default in scrolling container composables — for example, , , and — in Compose Foundation 1.1.0 and above, regardless of API level. Figure 18. Overscroll using stretch effect at the edge of the containerAccessibilityAccessibility standards built into Material components are designed to provide a foundation for inclusive product design. Understanding your product’s accessibility can enhance usability for all users, including those with low vision, blindness, hearing impairments, cognitive impairments, motor impairments, or situational disabilities (such as a broken arm). Color accessibilityDynamic color is designed to meet accessibility standards for color contrast. The system of tonal palettes is critical to making any color scheme accessible by default. Material's color system provides standard tone values and measurements that can be used to meet accessible contrast ratios. Figure 19. Reply sample app: Primary, secondary and tertiary tonal palettes (top to bottom)All Material components and dynamic theming already use the above color roles from a set of , selected to meet accessibility requirements. However, if you are customizing components, make sure to use appropriate color roles and avoid mismatch. Use on-primary on top of primary, and on-primary-container on top of primary-container, and the same for other accent and neutral colors to provide accessible contrast to the user. The use of a tertiary container on top of primary gives the user a poor contrast button: MaterialTheme( ) { }6 Figure 20. Sufficient contrast (left) versus poor contrast (right)Typography accessibilityThe M3 type scale updates the static type ramp and values to offer a simplified but dynamic framework of size categories that scale across devices. For example, in M3, Display Small can be assigned different values depending upon the device context, such as a phone or a tablet. Large screensMaterial provides guidance on adaptive layouts and foldables to make your apps accessible and improve the ergonomics of users holding large devices. Material provides different kinds of navigation to help you provide better user experience for large devices. You can learn more about android large screen guidelines and see our Reply sample for adaptive and accessible design. |