การนำมาใช้ร่วมกับ Theme.AppCompat (Default Theme)
Required
*update your app's compileSdkVersion to 28
*download the Android 9 using the SDK manager.
Step 1 - Setting for Library
dependencies {
implementation 'com.google.android.material:material:1.0.0' // เลือกใช้ตามเวอร์ชั่นที่ releases ใน github
..
..
..
}
Step 2 - Add Material Components to style.xml
Theme ของ meterial design ที่มีให้ใช้
Theme.MaterialComponents
Theme.MaterialComponents.NoActionBar
Theme.MaterialComponents.Light
Theme.MaterialComponents.Light.NoActionBar
Theme.MaterialComponents.Light.DarkActionBar
Theme.MaterialComponents.DayNight
Theme.MaterialComponents.DayNight.NoActionBar
Theme.MaterialComponents.DayNight.DarkActionBar
เราสามารถเพิ่ม Component เข้ามาทีละตัวได้ โดยไม่เพิ่มธีมของแอพ
ทำให้รักษาเค้าโครงเดิมที่มีอยู่ทำงานเหมือนเดิม
อยากใช้อันไหนเลือกจับมาใส่ทีละตัวได้ครับ ชีวิตเริ่มสดใสขึ้นมานิดนึง >_<
/res/values/style.xml
<style name="Theme.MyApp" parent="Theme.AppCompat">
<!-- Original AppCompat attributes. -->
<item name="colorPrimary">@color/my_app_primary_color</item>
<item name="colorSecondary">@color/my_app_secondary_color</item>
<item name="android:colorBackground">@color/my_app_background_color</item>
<item name="colorError">@color/my_app_error_color</item>
<!-- New MaterialComponents attributes. -->
<item name="colorPrimaryVariant">@color/my_app_primary_variant_color</item>
<item name="colorSecondaryVariant">@color/my_app_secondary_variant_color</item>
<item name="colorSurface">@color/my_app_surface_color</item>
<item name="colorOnPrimary">@color/my_app_color_on_primary</item>
<item name="colorOnSecondary">@color/my_app_color_on_secondary</item>
<item name="colorOnBackground">@color/my_app_color_on_background</item>
<item name="colorOnError">@color/my_app_color_on_error</item>
<item name="colorOnSurface">@color/my_app_color_on_surface</item>
<item name="scrimBackground">@color/mtrl_scrim_color</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="textAppearanceOverline">@style/TextAppearance.MaterialComponents.Overline</item>
<item name="textAppearanceButton">@style/TextAppearance.MaterialComponents.Button</item>
^
^
// เราจะมาลองใช้ textAppearanceButton กัน
ปล.ถ้าลบออก จะไม่สามารถกำหนด Style ของ Meterial ให้กับ Button ได้นะ
..
..
</style>
Step 3 - เรียกใช้ Components ใน layout ไฟล์ของเราได้เลย
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button"
android:layout_margin="10dp"
android:id="@+id/material_button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Default"/>
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.UnelevatedButton"
android:layout_margin="10dp"
android:id="@+id/material_button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Unelevated Button"/>
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_margin="10dp"
android:id="@+id/material_button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Outlined Button"/>
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_margin="10dp"
android:id="@+id/material_button4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Text Button"/>
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Label of TextInputLayout">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
output :
จากด้านบนถ้าเราตัด Style ของ TextInputLayout ออก
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Label of TextInputLayout">
TextInputLayout ก็จะกลายเป็นแบบภาพด้านล่างนี้แทนนะครับ
เส้นขอบรอบๆ Edittext ของเรามาจาก style โดยไม่ต้องเขียนโค้ดแต่ง Style เอาเอง >_<
สุดท้ายครับ ขอยกตัวอย่างอีกเคสเรื่อง CardView
กรณีเราเปิด Tag และใช้ Style มาเป็นของ MeterialCardView แบบนี้
จะมี strokeColor , strokeWidth และอื่นๆเพิ่มมาให้เราใช้งานด้วยครับ
<com.google.android.material.card.MaterialCardView
style="@style/Widget.MaterialComponents.CardView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="10dp"
android:layout_weight="1"
app:strokeColor="@color/colorPrimaryDark"
app:strokeWidth="2dp"
app:cardBackgroundColor="#DAD9D9"
app:cardCornerRadius="20dp">
สรุปขั้นตอนการเริ่มใช้งาน
- Setting for Library
- Add Material Components to style.xml
- เรียกใช้ Components ใน layout ไฟล์ของเราได้เลย
*Tip - กรณีไม่สามารถ inherit หรือใช้ theme โดยตรงจาก Material Components theme ได้
เราสามารถ inherit จาก Components Bridge theme ได้มี Bridge themes ให้เลือกใช้ดังนี้ครับ
Ref :
https://github.com/material-components/material-components-android/blob/master/docs/getting-started.md
เราสามารถ inherit จาก Components Bridge theme ได้มี Bridge themes ให้เลือกใช้ดังนี้ครับ
- Theme.MaterialComponents.Bridge
- Theme.MaterialComponents.Light.Bridge
- Theme.MaterialComponents.NoActionBar.Bridge
- Theme.MaterialComponents.Light.NoActionBar.Bridge
- Theme.MaterialComponents.Light.DarkActionBar.Bridge
Ref :
https://github.com/material-components/material-components-android/blob/master/docs/getting-started.md