MDC-111 Android: การรวมคอมโพเนนต์เนื้อหาเข้ากับฐานของโค้ด (Kotlin)

1. บทนำ

logo_components_color_2x_web_96dp.png

Material Components (MDC) ช่วยให้นักพัฒนาแอปใช้งาน Material Design ได้ MDC สร้างขึ้นโดยทีมวิศวกรและนักออกแบบ UX ของ Google โดยมีคอมโพเนนต์ UI ที่สวยงามและใช้งานได้หลายสิบรายการ และพร้อมใช้งานสำหรับ Android, iOS, เว็บ และ Flutter.material.io/develop

Material Components for Android (MDC Android) ไม่ใช่ระบบหรือเฟรมเวิร์กใหม่ที่ต้องมีการเปลี่ยนกระบวนทัศน์ในแอปของคุณ MDC Android สร้างขึ้นบนคลาสและ API เดียวกันกับที่คุณรู้จักอยู่แล้วใน Android เช่น ปุ่มและช่องข้อความ AppCompat คุณสามารถใช้คอมโพเนนต์ที่ MDC Android มีให้ได้ตามต้องการและปรับปรุงการออกแบบแอปที่มีอยู่ได้ทันที

สิ่งที่คุณจะสร้าง

ในโค้ดแล็บนี้ คุณจะแทนที่คอมโพเนนต์ที่มีอยู่บางส่วนในแบบฟอร์มด้วยคอมโพเนนต์ใหม่จาก MDC

คอมโพเนนต์ MDC-Android ใน Codelab นี้

  • ช่องข้อความ
  • ปุ่ม
  • เมนู

สิ่งที่คุณต้องมี

  • ความรู้พื้นฐานเกี่ยวกับการพัฒนาแอป Android
  • Android Studio (ดาวน์โหลดที่นี่หากยังไม่มี)
  • โปรแกรมจำลองหรืออุปกรณ์ Android (พร้อมใช้งานผ่าน Android Studio)
  • โค้ดตัวอย่าง (ดูขั้นตอนถัดไป)

คุณจะให้คะแนนระดับประสบการณ์ในการสร้างแอป Android เท่าใด

ผู้ฝึกหัด ขั้นกลาง ผู้ชำนาญ

2. ตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์

ดาวน์โหลดแอป Codelab สำหรับผู้เริ่มต้น

แอปเริ่มต้นอยู่ในไดเรกทอรี material-components-android-codelabs-111-starter/kotlin อย่าลืม cd ไปยังไดเรกทอรีนั้นก่อนเริ่มต้น

...หรือโคลนจาก GitHub

หากต้องการโคลนโค้ดแล็บนี้จาก GitHub ให้เรียกใช้คำสั่งต่อไปนี้

git clone https://github.com/material-components/material-components-android-codelabs
cd material-components-android-codelabs/
git checkout 111-starter

โหลดโค้ดเริ่มต้นใน Android Studio

  1. เมื่อวิซาร์ดการตั้งค่าเสร็จสิ้นและหน้าต่าง Welcome to Android Studio ปรากฏขึ้น ให้คลิก Open an existing Android Studio project ไปที่ไดเรกทอรีที่คุณติดตั้งโค้ดตัวอย่าง แล้วเลือก kotlin -> shipping (หรือค้นหา shipping ในคอมพิวเตอร์) เพื่อเปิดโปรเจ็กต์การจัดส่ง
  2. รอสักครู่เพื่อให้ Android Studio สร้างและซิงค์โปรเจ็กต์ ดังที่แสดงโดยตัวบ่งชี้กิจกรรมที่ด้านล่างของหน้าต่าง Android Studio
  3. ในขั้นตอนนี้ Android Studio อาจแสดงข้อผิดพลาดในการสร้างบางอย่างเนื่องจากคุณไม่มี Android SDK หรือเครื่องมือบิลด์ เช่น เครื่องมือที่แสดงด้านล่าง ทำตามวิธีการใน Android Studio เพื่อติดตั้ง/อัปเดตเครื่องมือเหล่านี้และซิงค์โปรเจ็กต์

2wEZ1kuSFwiRvi_vYXnYfwoQ5J79OVBi1SL6044ETje5cDT2rUHGy8ExjGxlBWlWuNUMf5tkLRUrr2_bz_0Im_JDvLyC-X-tNmBJvKUgsn8T4d11A1cq0ItqQl2n6DJrYKY-dEyRdw

เรียกใช้แอปเริ่มต้น

  1. ตรวจสอบว่าการกำหนดค่าบิลด์ทางด้านซ้ายของปุ่มเรียกใช้ / เล่นเป็น app
  2. กดปุ่มเรียกใช้ / เล่นสีเขียวเพื่อสร้างและเรียกใช้แอป
  3. ในหน้าต่างเลือกเป้าหมายการติดตั้งใช้งาน หากคุณมีอุปกรณ์ Android แสดงอยู่ในอุปกรณ์ที่พร้อมใช้งานแล้ว ให้ข้ามไปยังขั้นตอนที่ 8 หรือคลิกสร้างอุปกรณ์เสมือนใหม่
  4. ในหน้าจอเลือกฮาร์ดแวร์ ให้เลือกอุปกรณ์โทรศัพท์ เช่น Pixel 2 แล้วคลิกถัดไป
  5. ในหน้าจออิมเมจระบบ ให้เลือกเวอร์ชัน Android ล่าสุด โดยควรเลือกระดับ API สูงสุด หากไม่ได้ติดตั้ง ให้คลิกลิงก์ดาวน์โหลดที่แสดงและดาวน์โหลดให้เสร็จสมบูรณ์
  6. คลิกถัดไป
  7. ในหน้าจอ Android Virtual Device (AVD) ให้ปล่อยการตั้งค่าไว้ตามเดิม แล้วคลิกเสร็จสิ้น
  8. เลือกอุปกรณ์ Android จากกล่องโต้ตอบเป้าหมายการติดตั้งใช้งาน
  9. คลิกตกลง
  10. Android Studio จะสร้างแอป นำไปใช้งาน และเปิดแอปในอุปกรณ์เป้าหมายโดยอัตโนมัติ

สำเร็จ! คุณควรเห็นแอปและแบบฟอร์มของแอป

dba8e6132a12da58.png

3. อัปเดตช่องข้อความ

ช่องข้อความ Material Design มีความสามารถในการใช้งานที่เหนือกว่าช่องข้อความธรรมดาอย่างมาก การกำหนดโซนการแตะด้วยเส้นขอบหรือการเติมพื้นหลังจะช่วยให้ผู้ใช้มีแนวโน้มที่จะโต้ตอบกับแบบฟอร์มหรือระบุช่องข้อความภายในเนื้อหาที่ซับซ้อนมากขึ้น

นำเข้า MDC-Android

ไปที่ไฟล์ build.gradle ของโมดูล app และตรวจสอบว่าบล็อก dependencies มีทรัพยากร Dependency ใน MDC Android

api 'com.google.android.material:material:1.1.0-alpha05'

แทนที่รูปแบบช่องข้อความ

ใน shipping_info_activity.xml ให้เพิ่มสไตล์ต่อไปนี้ลงในคอมโพเนนต์ XML ของ TextInputLayout ทั้งหมด

shipping_info_activity.xml

style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"

TextInputLayout แต่ละรายการควรมีลักษณะดังนี้

shipping_info_activity.xml

<com.google.android.material.textfield.TextInputLayout
   android:id="@+id/name_text_input"
   style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   app:errorEnabled="true">

   <com.google.android.material.textfield.TextInputEditText
       android:id="@+id/name_edit_text"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:hint="@string/label_name" />
</com.google.android.material.textfield.TextInputLayout>

สร้างและเรียกใช้

824c2b33592b2c7e.png

ช่องข้อความทั้งหมดได้รับการอัปเดตให้ใช้การออกแบบใหม่กว่าใน MDC

เพิ่มข้อผิดพลาด

ฟิลด์ข้อความ MDC มีการนำเสนอข้อผิดพลาดในตัว MDC จะเพิ่มข้อความสีแดงใต้ช่องข้อความและอัปเดตการตกแต่งให้เป็นสีแดงด้วย

ใน ShippingInfoActivity.kt ให้อัปเดต onCreate() เพื่อตรวจสอบข้อความที่ป้อนและตั้งค่าข้อผิดพลาดตามความเหมาะสม ซึ่งควรมีลักษณะดังนี้

ShippingInfoActivity.kt

override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(R.layout.shipping_info_activity)

   val rootView = findViewById<View>(android.R.id.content)

   val textInputLayouts = Utils.findViewsWithType(
           rootView, TextInputLayout::class.java)

   save_button.setOnClickListener {
       var noErrors = true
       for (textInputLayout in textInputLayouts) {
           val editTextString = textInputLayout.editText!!.text.toString()
           if (editTextString.isEmpty()) {
               textInputLayout.error = resources.getString(R.string.error_string)
               noErrors = false
           } else {
               textInputLayout.error = null
           }
       }

       if (noErrors) {
           // All fields are valid!
       }
   }
}

สร้างและเรียกใช้ กดบันทึก แต่เว้นช่องข้อความอย่างน้อย 1 ช่องว่างไว้

ef2a846d08f2780d.png

ช่องข้อความที่ว่างเปล่าจะเป็นสีแดงและมีข้อความแสดงข้อผิดพลาดอยู่ด้านล่าง

4. อัปเดตปุ่ม

MDC มีปุ่มที่มีลักษณะดังนี้

  • คลื่นหมึก
  • มุมมน
  • การรองรับธีม
  • เลย์เอาต์และตัวอักษรที่คมชัด
  • สร้างขึ้นบน AppCompatButton (คลาสปุ่มมาตรฐานของ Android) เพื่อให้คุณทราบวิธีใช้ปุ่มเหล่านี้ในโค้ด

ไม่บังคับ: แทนที่คลาสปุ่ม

โดยค่าเริ่มต้น ไลบรารี Material จะขยายปุ่มปกติเป็นปุ่ม MDC โดยอัตโนมัติ อย่างไรก็ตาม คุณอาจเลือกแทนที่การอ้างอิงทั้งหมดไปยัง Button ด้วย MaterialButton เพื่อให้เข้าถึงเมธอดเพิ่มเติมที่ใช้ได้เฉพาะใน MaterialButton เช่น การเปลี่ยนรัศมีมุม ปุ่ม MDC เป็นคอมโพเนนต์แบบเสียบแล้วใช้เลยที่เรียบง่าย คุณเพียงแค่แทนที่ชื่อคอมโพเนนต์ XML Button ด้วย MaterialButton และใช้รูปแบบ MaterialButton เริ่มต้นกับ MaterialButton

ใน shipping_info_activity.xml ให้เปลี่ยนปุ่มจาก

shipping_info_activity.xml

<Button
   android:id="@+id/save_button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="end"
   android:layout_marginTop="16dp"
   android:text="@string/label_save" />

ถึง:

shipping_info_activity.xml

<com.google.android.material.button.MaterialButton
   android:id="@+id/save_button"
   style="@style/Widget.MaterialComponents.Button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="end"
   android:layout_marginTop="16dp"
   android:text="@string/label_save" />

สร้างและเรียกใช้

824c2b33592b2c7e.png

5. เพิ่มบัตร

MaterialCardView เป็นคอมโพเนนต์ที่สร้างขึ้นบน CardView โดยมีสิ่งต่อไปนี้

  • ระดับความสูงและการจัดรูปแบบที่ถูกต้อง
  • แอตทริบิวต์ความหนาและสีของเส้น

การแสดงเนื้อหาในรูปแบบการ์ด

ห่อLinearLayoutที่มีเนื้อหาของคุณใน shipping_info_activity.xml ด้วยคอมโพเนนต์ MaterialCardView ดังนี้

shipping_info_activity.xml

<com.google.android.material.card.MaterialCardView
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_margin="16dp"
   app:contentPadding="16dp">


   <!-- LinearLayout goes here -->


</com.google.android.material.card.MaterialCardView>

สร้างและเรียกใช้ ควรห่อหุ้มแบบฟอร์มทั้งหมดไว้ในการ์ด

75c86ab9fa395e3c.png

คอมโพเนนต์ Material Card View เป็นวิธีที่คุ้นเคยแต่แปลกใหม่ในการใส่เนื้อหาลงในการ์ดได้อย่างง่ายดาย

6. สรุป

คุณได้แทนที่คอมโพเนนต์ทั่วไปบางอย่างเพื่อแสดงคุณค่าในทันที ได้แก่ ช่องข้อความ ปุ่ม การ์ด และคุณไม่จำเป็นต้องออกแบบแอปใหม่ทั้งหมด คอมโพเนนต์อื่นๆ ก็สร้างความแตกต่างได้เช่นกัน เช่น แถบแอปด้านบนและ TabLayout

ขั้นตอนถัดไป

คุณสำรวจคอมโพเนนต์เพิ่มเติมใน MDC-Android ได้โดยไปที่แคตตาล็อกวิดเจ็ต Android

ฉันทำ Codelab นี้เสร็จได้โดยใช้เวลาและความพยายามที่สมเหตุสมผล

เห็นด้วยอย่างยิ่ง เห็นด้วย เป็นกลาง ไม่เห็นด้วย ไม่เห็นด้วยอย่างยิ่ง

ฉันต้องการใช้คอมโพเนนต์ Material ต่อไปในอนาคต

เห็นด้วยอย่างยิ่ง เห็นด้วย เฉยๆ ไม่เห็นด้วย ไม่เห็นด้วยอย่างยิ่ง