0Pricing
Android Academy · บทเรียน

ธีมและสไตล์

กำหนด Styles ที่นำกลับมาใช้ซ้ำได้สำหรับวิดเจ็ต และ Themes สำหรับแอป ตั้งค่าบทบาทสีของ Material 3 มาตราส่วนตัวอักษร แบบอักษรที่กำหนดเอง และโหมดมืด

ธีมและสไตล์ เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 5 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 5 บทเรียน

สไตล์กับธีม

มีแนวคิดสองอย่างที่มักสับสนกัน:

  • สไตล์ — ชุดแอตทริบิวต์ของมุมมองที่ใช้กับวิดเจ็ตเดียว เช่น ขนาดข้อความ สี และระยะขอบภายใน ตั้งค่าด้วย style="@style/MyButton"
  • ธีม — ชุดแอตทริบิวต์เชิงความหมายที่ใช้กับกิจกรรมหรือแอป มุมมองจะค้นหาแอตทริบิวต์ของธีมด้วย ?attr/colorPrimary

การกำหนดสไตล์

สร้างสไตล์ใน res/values/styles.xml สไตล์สามารถสืบทอดจาก parent ได้:

<!-- res/values/styles.xml -->
<resources>
    <style name="TitleText" parent="TextAppearance.Material3.HeadlineMedium">
        <item name="android:textColor">@color/on_surface</item>
        <item name="android:fontFamily">@font/roboto_bold</item>
    </style>

    <style name="PrimaryButton" parent="Widget.Material3.Button">
        <item name="android:paddingHorizontal">24dp</item>
        <item name="cornerRadius">8dp</item>
    </style>
</resources>

<!-- Using a style in XML: -->
<TextView
    style="@style/TitleText"
    android:text="Hello!" />

การกำหนดธีม

ธีมสืบทอดจาก parent ของ Material 3 และปรับค่าแอตทริบิวต์สีและรูปร่าง:

<!-- res/values/themes.xml -->
<resources>
    <style name="Theme.MyApp" parent="Theme.Material3.DayNight.NoActionBar">
        <!-- Color -->
        <item name="colorPrimary">@color/primary</item>
        <item name="colorOnPrimary">@color/on_primary</item>
        <item name="colorSecondary">@color/secondary</item>
        <item name="colorSurface">@color/surface</item>
        <item name="colorBackground">@color/background</item>

        <!-- Typography -->
        <item name="textAppearanceBodyMedium">@style/BodyMedium</item>

        <!-- Shape -->
        <item name="shapeAppearanceMediumComponent">@style/Shape.Medium</item>
    </style>
</resources>

ระบบสี Material 3

Material 3 ใช้บทบาทสีเชิงความหมายแทนค่าฐานสิบหกดิบ บทบาทสำคัญมีดังนี้:

  • colorPrimary — สีหลักของแบรนด์
  • colorOnPrimary — สีข้อความหรือไอคอนบนพื้นหลังหลัก
  • colorSecondary — สีเน้น
  • colorSurface — พื้นหลังของการ์ดหรือแผ่นด้านล่าง
  • colorError — สถานะข้อผิดพลาด
  • colorBackground — พื้นหลังหน้าต่าง

ทรัพยากรสี

กำหนดสีใน res/values/colors.xml:

<!-- res/values/colors.xml -->
<resources>
    <color name="primary">#6750A4</color>
    <color name="on_primary">#FFFFFF</color>
    <color name="secondary">#625B71</color>
    <color name="on_secondary">#FFFFFF</color>
    <color name="surface">#FFFBFE</color>
    <color name="background">#FFFBFE</color>
    <color name="error">#B3261E</color>
</resources>

ธีมมืด

ธีม Material 3 DayNight จัดการโหมดมืดโดยอัตโนมัติ เพิ่มรูปแบบสำหรับกลางคืนให้กับสี:

<!-- res/values-night/colors.xml  (night override) -->
<resources>
    <color name="primary">#D0BCFF</color>
    <color name="on_primary">#381E72</color>
    <color name="surface">#1C1B1F</color>
    <color name="background">#1C1B1F</color>
</resources>

// Switch dark mode programmatically:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)   // force dark
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)    // force light
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) // auto

รูปแบบตัวอักษร

Material 3 กำหนดระดับของรูปแบบตัวอักษรไว้ ใช้แอตทริบิวต์ textAppearance เพื่อให้ข้อความมีรูปแบบสอดคล้องกัน:

<TextView
    android:textAppearance="?attr/textAppearanceDisplayLarge"
    android:text="Big Title" />

<TextView
    android:textAppearance="?attr/textAppearanceHeadlineMedium"
    android:text="Section Header" />

<TextView
    android:textAppearance="?attr/textAppearanceBodyMedium"
    android:text="Body text content here" />

<TextView
    android:textAppearance="?attr/textAppearanceLabelSmall"
    android:text="Caption" />

แบบอักษรที่กำหนดเอง

เพิ่มแบบอักษรลงใน res/font/ แล้วอ้างอิงจากธีมหรือสไตล์:

<!-- res/font/my_font.xml — font family -->
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
    <font app:fontStyle="normal" app:fontWeight="400"
          app:font="@font/roboto_regular" />
    <font app:fontStyle="normal" app:fontWeight="700"
          app:font="@font/roboto_bold" />
</font-family>

<!-- Apply to a style: -->
<style name="Theme.MyApp" parent="...">
    <item name="android:fontFamily">@font/my_font</item>
</style>

การใช้ธีมกับกิจกรรม

ตั้งค่าธีมใน AndroidManifest.xml คุณสามารถใช้ธีมที่แตกต่างกันในแต่ละกิจกรรมได้:

<!-- AndroidManifest.xml -->
<application
    android:theme="@style/Theme.MyApp">

    <!-- Different theme for splash screen -->
    <activity
        android:name=".SplashActivity"
        android:theme="@style/Theme.MyApp.Splash" />

    <activity
        android:name=".MainActivity" />
</application>

การอ่านแอตทริบิวต์ของธีมในโค้ด

เข้าถึงแอตทริบิวต์ของธีมใดก็ได้ในโค้ด Kotlin ขณะทำงาน:

fun getColorFromTheme(context: Context, attrResId: Int): Int {
    val typedValue = TypedValue()
    context.theme.resolveAttribute(attrResId, typedValue, true)
    return typedValue.data
}

// Usage:
val primaryColor = getColorFromTheme(this, com.google.android.material.R.attr.colorPrimary)
binding.myView.setBackgroundColor(primaryColor)

Material Theme Builder

ใช้ Material Theme Builder (m3.material.io/theme-builder) เพื่อสร้างชุดสี Material 3 ที่สมบูรณ์จากสีแบรนด์ของคุณ เครื่องมือนี้ส่งออกไฟล์ XML ที่พร้อมใช้งานสำหรับ colors.xml และ themes.xml ซึ่งเป็นวิธีที่รวดเร็วที่สุดในการสร้างระบบการออกแบบที่สอดคล้องกัน

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ความแตกต่างสำคัญระหว่าง Style กับ Theme ใน Android คืออะไร

ทบทวน: ธีมและสไตล์

การออกแบบที่สอดคล้องกันเริ่มต้นที่นี่:

  • สไตล์ — แอตทริบิวต์ระดับวิดเจ็ต ใช้ซ้ำได้กับหลายมุมมอง
  • ธีม — แอตทริบิวต์ระดับแอปหรือกิจกรรม พร้อมบทบาทสีเชิงความหมาย
  • บทบาทสีของ Material 3: colorPrimary, colorSurface, colorError และอื่น ๆ
  • โหมดมืดผ่าน values-night/colors.xml + MODE_NIGHT_FOLLOW_SYSTEM
  • ระดับรูปแบบตัวอักษรผ่านแอตทริบิวต์ textAppearance
  • ใช้ Material Theme Builder เพื่อสร้างชุดสีได้อย่างรวดเร็ว

ถัดไป: วาดมุมมองที่กำหนดเองตั้งแต่ต้น

คำถามที่พบบ่อย

บทเรียน “ธีมและสไตล์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ธีมและสไตล์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 5 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ธีมและสไตล์”

กำหนด Styles ที่นำกลับมาใช้ซ้ำได้สำหรับวิดเจ็ต และ Themes สำหรับแอป ตั้งค่าบทบาทสีของ Material 3 มาตราส่วนตัวอักษร แบบอักษรที่กำหนดเอง และโหมดมืด คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 5 บทเรียน

บทเรียน “ธีมและสไตล์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม

ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐาน Material Design
  2. ธีมและสไตล์
  3. มุมมองที่กำหนดเอง
  4. ภาพเคลื่อนไหวและการเปลี่ยนผ่าน
  5. การนำทางด้านล่างและแท็บ
← กลับไปที่ Android Academy