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

1. บทนำ

logo_components_color_2x_web_96dp.png

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

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

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

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

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

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

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

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

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

มือใหม่ ระดับกลาง ผู้ชำนาญ

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

ดาวน์โหลดแอป Codelab เริ่มต้น

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

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

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

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

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

  1. เมื่อวิซาร์ดการตั้งค่าดำเนินการเสร็จแล้วและหน้าต่างยินดีต้อนรับสู่ Android Studio ปรากฏขึ้น ให้คลิกเปิดโปรเจ็กต์ Android Studio ที่มีอยู่ ไปที่ไดเรกทอรีที่คุณได้ติดตั้งโค้ดตัวอย่างไว้ และเลือก kotlin -> การจัดส่ง (หรือค้นหาการจัดส่งในคอมพิวเตอร์) เพื่อเปิดโครงการการจัดส่ง
  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. ในหน้าจออุปกรณ์เสมือน (AVD) ของ Android (AVD) ให้ปล่อยการตั้งค่าไว้เหมือนเดิม แล้วคลิกเสร็จสิ้น
  8. เลือกอุปกรณ์ Android จากกล่องโต้ตอบเป้าหมายการทำให้ใช้งานได้
  9. คลิกตกลง
  10. Android Studio จะสร้างแอป ติดตั้งใช้งาน และเปิดแอปในอุปกรณ์เป้าหมายโดยอัตโนมัติ

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

dba8e6132a12da58.png

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

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

นำเข้า 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 โดยอัตโนมัติ อย่างไรก็ตาม คุณอาจเลือกที่จะแทนที่การอ้างอิงไปยังปุ่มทั้งหมดด้วย 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 เป็นวิธีที่คุ้นเคยแต่ใหม่ในการห่อเนื้อหาไว้ในการ์ดอย่างง่ายดาย

6. สรุป

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

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

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

ฉันทำ Codelab นี้เสร็จได้ โดยใช้เวลาและลงแรงพอสมควร

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

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

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