mirror of
https://github.com/material-components/material-components-android.git
synced 2026-02-04 00:44:14 +08:00
312 lines
15 KiB
Markdown
312 lines
15 KiB
Markdown
<!--docs:
|
||
title: "Getting Started"
|
||
layout: landing
|
||
section: docs
|
||
path: /docs/getting-started/
|
||
-->
|
||
|
||
# Getting started with Material Components for Android
|
||
|
||
## 1. Migration guidance
|
||
|
||
Take a look at our [guide](https://material.io/blog/migrating-material-3) and
|
||
[codelab](https://goo.gle/apply-dynamic-color) to help you migrate your codebase
|
||
using Material Components for Android to the new Material 3 system.
|
||
|
||
Additionally, if you are still using the legacy Design Support Library, take a
|
||
look at our
|
||
[legacy guide](https://material.io/blog/migrate-android-material-components) to
|
||
help you migrate your codebase to Material Components for Android.
|
||
|
||
## 2. Maven library dependency
|
||
|
||
Material Components for Android is available through Google's Maven Repository.
|
||
To use it:
|
||
|
||
1. Open the `build.gradle` file for your application.
|
||
2. Make sure that the `repositories` section includes Google's Maven Repository
|
||
`google()`. For example:
|
||
|
||
```groovy
|
||
allprojects {
|
||
repositories {
|
||
google()
|
||
jcenter()
|
||
}
|
||
}
|
||
```
|
||
|
||
3. Add the library to the `dependencies` section:
|
||
|
||
```groovy
|
||
dependencies {
|
||
// ...
|
||
implementation 'com.google.android.material:material:<version>'
|
||
// ...
|
||
}
|
||
```
|
||
|
||
Visit
|
||
[Google's Maven Repository](https://maven.google.com/web/index.html#com.google.android.material:material)
|
||
or
|
||
[MVN Repository](https://mvnrepository.com/artifact/com.google.android.material/material)
|
||
to find the latest version of the library.
|
||
|
||
**Note:** In order to use the new `Material3` themes and component styles, you
|
||
must depend on version `1.5.0-alpha04` or later.
|
||
|
||
### New Namespace and AndroidX
|
||
|
||
If your app currently depends on the original Design Support Library, you can
|
||
make use of the
|
||
[`Refactor to AndroidX…`](https://developer.android.com/jetpack/androidx/migrate)
|
||
option provided by Android Studio. Doing so will update your app's dependencies
|
||
and code to use the newly packaged `androidx` and `com.google.android.material`
|
||
libraries.
|
||
|
||
If you don't want to switch over to the new `androidx` and
|
||
`com.google.android.material` packages yet, you can use Material Components via
|
||
the `com.android.support:design:28.0.0` dependency.
|
||
|
||
**Note:** You should not use the `com.android.support` and
|
||
`com.google.android.material` dependencies in your app at the same time.
|
||
|
||
## 3. Android 12 compilation
|
||
|
||
In order to use the latest versions of Material Components for Android and the
|
||
AndroidX Jetpack libraries, you will have to install the latest version of
|
||
Android Studio and update your app's `compileSdkVersion` to `31`.
|
||
|
||
As part of migrating to Android 12, you'll need to add `android:exported` to any
|
||
activities, services, or broadcast receivers in your manifest that use intent
|
||
filters (see the
|
||
[documentation](https://developer.android.com/about/versions/12/behavior-changes-12#exported)).
|
||
Consider reading through the Android 12
|
||
[app migration guide](https://developer.android.com/about/versions/12/migration)
|
||
and
|
||
[behavior changes](https://developer.android.com/about/versions/12/behavior-changes-all)
|
||
for more tips and information.
|
||
|
||
## 4. Java 8 compilation
|
||
|
||
The latest AndroidX Jetpack libraries now require your app to be compiled with
|
||
Java 8. See the
|
||
[Java 8 language features and APIs documentation](https://developer.android.com/studio/write/java8-support)
|
||
for more information on Java 8 support and how to enable it for your app.
|
||
|
||
## 5. `AppCompatActivity`
|
||
|
||
Use `AppCompatActivity` to ensure that all the components work correctly. If you
|
||
are unable to extend from `AppCompatActivity`, update your activities to use
|
||
[`AppCompatDelegate`](https://developer.android.com/reference/androidx/appcompat/app/AppCompatDelegate).
|
||
This will enable the AppCompat or Material versions of components to be inflated
|
||
(depending on your theme), among other important things.
|
||
|
||
## 6. `Material3` theme inheritance
|
||
|
||
We recommend you perform an app-wide migration by changing your app theme to
|
||
inherit from a `Material3` theme. Be sure to test thoroughly afterwards, since
|
||
this may change the appearance and behavior of existing layout components.
|
||
|
||
Check out the new Material Theme Builder which can be used to generate your
|
||
`Material3` app theme, with all of the Material Color System roles filled out
|
||
based on your brand colors.
|
||
|
||
- [Web](https://material.io/material-theme-builder)
|
||
- [Figma](https://goo.gle/material-theme-builder-figma)
|
||
|
||
**Note:** If you **can't** change your theme, you can continue to inherit from
|
||
an `AppCompat` or `MaterialComponents` theme and add some new theme attributes
|
||
to your theme. See the
|
||
[**AppCompat or MaterialComponents themes**](#appcompat-or-materialcomponents-themes)
|
||
section for more details.
|
||
|
||
### **`Material3` themes**
|
||
|
||
Here are the `Material3` themes you can use to get the latest component styles
|
||
and theme-level attributes, as well as their `MaterialComponents` equivalents
|
||
when applicable.
|
||
|
||
`Material3` | `MaterialComponents`
|
||
-------------------------------------- | --------------------
|
||
`Theme.Material3.Light` | `Theme.MaterialComponents.Light`
|
||
`Theme.Material3.Light.NoActionBar` | `Theme.MaterialComponents.Light.NoActionBar`
|
||
`Theme.Material3.Dark` | `Theme.MaterialComponents`
|
||
`Theme.Material3.Dark.NoActionBar` | `Theme.MaterialComponents.NoActionBar`
|
||
`Theme.Material3.DayNight` | `Theme.MaterialComponents.DayNight`
|
||
`Theme.Material3.DayNight.NoActionBar` | `Theme.MaterialComponents.DayNight.NoActionBar`
|
||
N/A | `Theme.MaterialComponents.Light.DarkActionBar`
|
||
N/A | `Theme.MaterialComponents.DayNight.DarkActionBar`
|
||
|
||
Update your app theme to inherit from one of these themes:
|
||
|
||
```xml
|
||
<style name="Theme.MyApp" parent="Theme.Material3.DayNight.NoActionBar">
|
||
<!-- ... -->
|
||
</style>
|
||
```
|
||
|
||
For more information on how to set up theme-level attributes for your app, take
|
||
a look at our [Theming](theming.md) guide, as well as our
|
||
[Dark Theme](theming/Dark.md) guide for why it's important to inherit from the
|
||
`DayNight` theme.
|
||
|
||
`Material3` themes enable a custom view inflater, which replaces default
|
||
components with their Material counterparts. Currently, this replaces the
|
||
following XML components:
|
||
|
||
* `<Button` → [`MaterialButton`](components/Button.md)
|
||
* `<CheckBox` → [`MaterialCheckBox`](components/Checkbox.md)
|
||
* `<RadioButton` → [`MaterialRadioButton`](components/RadioButton.md)
|
||
* `<TextView` → [`MaterialTextView`](components/MaterialTextView.md)
|
||
* `<AutoCompleteTextView` →
|
||
[`MaterialAutoCompleteTextView`](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/textfield/MaterialAutoCompleteTextView.java)
|
||
|
||
### **`AppCompat` or `MaterialComponents` Themes**
|
||
|
||
You can incrementally test new Material components without changing your app
|
||
theme. This allows you to keep your existing layouts looking and behaving the
|
||
same, while introducing new components to your layout one at a time.
|
||
|
||
However, you must add the following new theme attributes to your existing app
|
||
theme, or you will encounter `ThemeEnforcement` errors:
|
||
|
||
```xml
|
||
<style name="Theme.MyApp" parent="Theme.AppCompat OR Theme.MaterialComponents">
|
||
|
||
<!-- Original AppCompat attributes. -->
|
||
<item name="colorPrimary">@color/my_app_primary</item>
|
||
<item name="colorPrimaryDark">@color/my_app_primary_dark</item>
|
||
<item name="colorSecondary">@color/my_app_secondary</item>
|
||
<item name="android:colorBackground">@color/my_app_background</item>
|
||
<item name="colorError">@color/my_app_error</item>
|
||
|
||
<!-- MaterialComponents attributes (needed if parent="Theme.AppCompat"). -->
|
||
<item name="colorPrimaryVariant">@color/my_app_primary_variant</item>
|
||
<item name="colorSecondaryVariant">@color/my_app_secondary_variant</item>
|
||
<item name="colorSurface">@color/my_app_surface</item>
|
||
<item name="colorOnPrimary">@color/my_app_on_primary</item>
|
||
<item name="colorOnSecondary">@color/my_app_on_secondary</item>
|
||
<item name="colorOnBackground">@color/my_app_on_background</item>
|
||
<item name="colorOnError">@color/my_app_on_error</item>
|
||
<item name="colorOnSurface">@color/my_app_on_surface</item>
|
||
<item name="scrimBackground">@color/mtrl_scrim</item>
|
||
<item name="textAppearanceHeadline1">@style/TextAppearance.MaterialComponents.Headline1</item>
|
||
<item name="textAppearanceHeadline2">@style/TextAppearance.MaterialComponents.Headline2</item>
|
||
<item name="textAppearanceHeadline3">@style/TextAppearance.MaterialComponents.Headline3</item>
|
||
<item name="textAppearanceHeadline4">@style/TextAppearance.MaterialComponents.Headline4</item>
|
||
<item name="textAppearanceHeadline5">@style/TextAppearance.MaterialComponents.Headline5</item>
|
||
<item name="textAppearanceHeadline6">@style/TextAppearance.MaterialComponents.Headline6</item>
|
||
<item name="textAppearanceSubtitle1">@style/TextAppearance.MaterialComponents.Subtitle1</item>
|
||
<item name="textAppearanceSubtitle2">@style/TextAppearance.MaterialComponents.Subtitle2</item>
|
||
<item name="textAppearanceBody1">@style/TextAppearance.MaterialComponents.Body1</item>
|
||
<item name="textAppearanceBody2">@style/TextAppearance.MaterialComponents.Body2</item>
|
||
<item name="textAppearanceCaption">@style/TextAppearance.MaterialComponents.Caption</item>
|
||
<item name="textAppearanceButton">@style/TextAppearance.MaterialComponents.Button</item>
|
||
<item name="textAppearanceOverline">@style/TextAppearance.MaterialComponents.Overline</item>
|
||
|
||
<!-- Material3 attributes (needed if parent="Theme.MaterialComponents"). -->
|
||
<item name="colorPrimaryInverse">@color/my_app_primary_inverse</item>
|
||
<item name="colorPrimaryContainer">@color/my_app_primary_container</item>
|
||
<item name="colorOnPrimaryContainer">@color/my_app_on_primary_container</item>
|
||
<item name="colorSecondaryContainer">@color/my_app_secondary_container</item>
|
||
<item name="colorOnSecondaryContainer">@color/my_app_on_secondary_container</item>
|
||
<item name="colorTertiary">@color/my_app_tertiary</item>
|
||
<item name="colorOnTertiary">@color/my_app_on_tertiary</item>
|
||
<item name="colorTertiaryContainer">@color/my_app_tertiary_container</item>
|
||
<item name="colorOnTertiaryContainer">@color/my_app_on_tertiary_container</item>
|
||
<item name="colorSurfaceVariant">@color/my_app_surface_variant</item>
|
||
<item name="colorOnSurfaceVariant">@color/my_app_on_surface_variant</item>
|
||
<item name="colorSurfaceInverse">@color/my_app_inverse_surface</item>
|
||
<item name="colorOnSurfaceInverse">@color/my_app_inverse_on_surface</item>
|
||
<item name="colorOutline">@color/my_app_outline</item>
|
||
<item name="colorErrorContainer">@color/my_app_error_container</item>
|
||
<item name="colorOnErrorContainer">@color/my_app_on_error_container</item>
|
||
<item name="textAppearanceDisplayLarge">@style/TextAppearance.Material3.DisplayLarge</item>
|
||
<item name="textAppearanceDisplayMedium">@style/TextAppearance.Material3.DisplayMedium</item>
|
||
<item name="textAppearanceDisplaySmall">@style/TextAppearance.Material3.DisplaySmall</item>
|
||
<item name="textAppearanceHeadlineLarge">@style/TextAppearance.Material3.HeadlineLarge</item>
|
||
<item name="textAppearanceHeadlineMedium">@style/TextAppearance.Material3.HeadlineMedium</item>
|
||
<item name="textAppearanceHeadlineSmall">@style/TextAppearance.Material3.HeadlineSmall</item>
|
||
<item name="textAppearanceTitleLarge">@style/TextAppearance.Material3.TitleLarge</item>
|
||
<item name="textAppearanceTitleMedium">@style/TextAppearance.Material3.TitleMedium</item>
|
||
<item name="textAppearanceTitleSmall">@style/TextAppearance.Material3.TitleSmall</item>
|
||
<item name="textAppearanceBodyLarge">@style/TextAppearance.Material3.BodyLarge</item>
|
||
<item name="textAppearanceBodyMedium">@style/TextAppearance.Material3.BodyMedium</item>
|
||
<item name="textAppearanceBodySmall">@style/TextAppearance.Material3.BodySmall</item>
|
||
<item name="textAppearanceLabelLarge">@style/TextAppearance.Material3.LabelLarge</item>
|
||
<item name="textAppearanceLabelMedium">@style/TextAppearance.Material3.LabelMedium</item>
|
||
<item name="textAppearanceLabelSmall">@style/TextAppearance.Material3.LabelSmall</item>
|
||
<item name="shapeAppearanceSmallComponent">@style/ShapeAppearance.Material3.SmallComponent</item>
|
||
<item name="shapeAppearanceMediumComponent">@style/ShapeAppearance.Material3.MediumComponent</item>
|
||
<item name="shapeAppearanceLargeComponent">@style/ShapeAppearance.Material3.LargeComponent</item>
|
||
</style>
|
||
```
|
||
|
||
## 7. Add Material components
|
||
|
||
Take a look at our [documentation](https://material.io/components?platform=android)
|
||
for the full list of available Material components. Each component's page has
|
||
specific instructions on how to implement it in your app.
|
||
|
||
Let's use [text fields](components/TextField.md) as an example.
|
||
|
||
### **Implementing a text field via XML**
|
||
|
||
The default
|
||
[outlined text field](https://material.io/go/design-text-fields#outlined-text-field)
|
||
XML is defined as:
|
||
|
||
```xml
|
||
<com.google.android.material.textfield.TextInputLayout
|
||
android:layout_width="match_parent"
|
||
android:layout_height="wrap_content"
|
||
android:hint="@string/textfield_label">
|
||
|
||
<com.google.android.material.textfield.TextInputEditText
|
||
android:layout_width="match_parent"
|
||
android:layout_height="wrap_content"/>
|
||
</com.google.android.material.textfield.TextInputLayout>
|
||
```
|
||
|
||
**Note:** If you are **not** using a theme that inherits from a `Material3`
|
||
theme, you will have to specify the text field style as well, via
|
||
`style="@style/Widget.Material3.TextInputLayout.OutlinedBox"`
|
||
|
||
Other text field styles are also provided. For example, if you want a
|
||
[filled text field](https://material.io/go/design-text-fields#filled-text-field)
|
||
in your layout, you can apply the `Material3` `filled` style to the text field
|
||
in XML:
|
||
|
||
```xml
|
||
<com.google.android.material.textfield.TextInputLayout
|
||
style="@style/Widget.Material3.TextInputLayout.FilledBox"
|
||
android:layout_width="match_parent"
|
||
android:layout_height="wrap_content"
|
||
android:hint="@string/textfield_label">
|
||
|
||
<com.google.android.material.textfield.TextInputEditText
|
||
android:layout_width="match_parent"
|
||
android:layout_height="wrap_content"/>
|
||
</com.google.android.material.textfield.TextInputLayout>
|
||
```
|
||
|
||
## Contributors
|
||
|
||
Material Components for Android welcomes contributions from the community. Check
|
||
out our [contributing guidelines](contributing.md) as well as an overview of the
|
||
[directory structure](directorystructure.md) before getting started.
|
||
|
||
## Useful Links
|
||
|
||
- [Theming Guide](theming.md)
|
||
- [Contributing](contributing.md)
|
||
- [Using Snapshot Version](using-snapshot-version.md)
|
||
- [Building From Source](building-from-source.md)
|
||
- [Catalog App](catalog-app.md)
|
||
- [Class documentation](https://developer.android.com/reference/com/google/android/material/classes)
|
||
- [MDC-Android on Stack Overflow](https://www.stackoverflow.com/questions/tagged/material-components+android)
|
||
- [Android Developer’s Guide](https://developer.android.com/training/material/index.html)
|
||
- [Material.io](https://www.material.io)
|
||
- [Material Design Guidelines](https://material.google.com)
|