ชุดอีโมจิมาตรฐานจะได้รับการอัปเดตเป็นประจำทุกปีโดย Unicode เนื่องจากการใช้งานอีโมจิเพิ่มขึ้นอย่างรวดเร็วสำหรับแอปทุกประเภท
หากแอปแสดงเนื้อหาอินเทอร์เน็ตหรือให้ป้อนข้อความ เราขอแนะนําอย่างยิ่งให้รองรับแบบอักษรอีโมจิล่าสุด มิเช่นนั้น อีโมจิที่ตามมาอาจแสดงเป็นกล่องสี่เหลี่ยมจัตุรัสเล็กๆ ที่เรียกว่า tofu (☐) หรือลำดับอีโมจิอื่นๆ ที่แสดงผลไม่ถูกต้อง
Android เวอร์ชัน 11 (API ระดับ 30) และต่ำกว่าอัปเดตแบบอักษรอีโมจิไม่ได้ แอปที่แสดงอีโมจิในเวอร์ชันดังกล่าวจึงต้องอัปเดตด้วยตนเอง
ตัวอย่างอีโมจิสมัยใหม่มีดังนี้
ตัวอย่าง | เวอร์ชัน |
---|---|
🫠 🫱🏼🫲🏿 🫰🏽 | 14.0 (กันยายน 2021) |
😶🌫️ 🧔🏻♀️ 🧑🏿❤️🧑🏾 | 13.1 (กันยายน 2020) |
🥲 🥷🏿 🐻❄️ | 13.0 (มีนาคม 2020) |
🧑🏻🦰 🧑🏿🦯 👩🏻🤝👩🏼 | 12.1 (ตุลาคม 2019) |
🦩 🦻🏿 👩🏼🤝👩🏻 | 12.0 (กุมภาพันธ์ 2019) |
BOM เดือนมีนาคม 2023 (Compose UI 1.4) รองรับอีโมจิเวอร์ชันล่าสุด รวมถึงใช้งานร่วมกับ Android เวอร์ชันเก่าได้จนถึง API 21
การรองรับนี้ไม่จําเป็นต้องเปลี่ยนแปลงแอป หากคุณใช้ Text
และ
TextField
(Material 2 หรือ Material 3) หรือ BasicText
และ
BasicTextField
คุณจะได้รับการรองรับอีโมจิสมัยใหม่โดยอัตโนมัติ
วิธีที่ดีที่สุดในการทดสอบอีโมจิล่าสุดในแอปคือการใช้อุปกรณ์จริงที่ใช้ API ระดับ 30 หรือต่ำกว่า
หากคุณใช้โซลูชันอีโมจิที่กำหนดเอง หรือต้องการปิดใช้ความละเอียดของอีโมจิเริ่มต้นในเครื่องมือเขียนด้วยเหตุผลอื่นๆ คุณสามารถใช้PlatformTextStyle(emojiSupportMatch)
ดังนี้
Text( text = "Hello $EMOJI_TEXT", style = TextStyle( platformStyle = PlatformTextStyle( emojiSupportMatch = EmojiSupportMatch.None )/* ... */ ) )
ความสามารถในการทำงานร่วมกัน
หากแอปใช้ทั้ง Views และ Compose ใน Activity
เดียวกัน โปรดตรวจสอบว่าคุณใช้ API ที่เหมาะสมเพื่อกำหนดค่าอีโมจิอย่างถูกต้อง ส่วนต่อไปนี้จะอธิบายว่าควรใช้ API แต่ละรายการเมื่อใด
ขยายเวลาจาก ComponentActivity
หาก Activity
ขยายมาจากเขียน ComponentActivity
แทนที่จะเป็น AppCompatActivity
ให้ทําตามวิธีการรองรับอีโมจิโดยไม่ต้องใช้ AppCompat
เนื่องจากคุณไม่ได้ขยาย AppCompatActivity
ให้เพิ่มไลบรารี Emoji2 ลงในรายการสิ่งที่ต้องพึ่งพา และใช้ EmojiTextView
ในมุมมองแทนวิดเจ็ต TextView
ดังที่แสดงในข้อมูลโค้ดต่อไปนี้
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val emojiTextView: EmojiTextView = findViewById(R.id.emoji_text_view) emojiTextView.text = getString(R.string.emoji_text_view, EMOJI_TEXT) val composeView: ComposeView = findViewById(R.id.compose_view) composeView.apply { setContent { // compose code } } } }
จากนั้นในไฟล์ XML ให้ทำดังนี้
<androidx.emoji2.widget.EmojiTextView android:id="@+id/emoji_text_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
ขยายเวลาจาก AppCompatActivity
หาก Activity
ขยายมาจาก AppCompatActivity
คุณจะใช้ ComposeView
เพื่อเรียกใช้ฟังก์ชันคอมโพสิเบิลได้ อีโมจิจะแสดงผลอย่างถูกต้องใน Android ทุกเวอร์ชันเมื่อคุณใช้คอมโพสิชันข้อความ
หากขยายจาก AppCompatActivity
ให้ขยาย TextView
จาก XML เพื่อให้ระบบแสดงผลอีโมจิอย่างถูกต้อง
กรณีนี้ใช้ในกรณีที่คุณขยาย XML
- อยู่นอก
ComposeView
ในActivity
โปรดสังเกตการใช้AppCompatActivity
และTextView
ในข้อมูลโค้ดต่อไปนี้
class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val emojiTextView: TextView = findViewById(R.id.emoji_text_view) emojiTextView.text = getString(R.string.emoji_text_view, EMOJI_TEXT) val composeView: ComposeView = findViewById(R.id.compose_view) composeView.apply { setContent { // compose code } } } }
- ภายใน
ComposeView
ผ่านการเชื่อมโยงมุมมองโดยใช้AndroidViewBinding
ดังตัวอย่างข้อมูลโค้ดต่อไปนี้
class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView( ComposeView(this).apply { setContent { Column { Text(EMOJI_TEXT) AndroidViewBinding(ExampleViewBinding::inflate) { emojiTextView.text = EMOJI_TEXT } } } } ) } }
หากต้องการขยายข้อความที่มี AndroidView
ภายใน ComposeView
ให้ใช้ AppCompatTextView
เพื่อแสดงผลอีโมจิอย่างถูกต้อง ดังนี้
class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView( ComposeView(this).apply { setContent { Column { Text(EMOJI_TEXT) AndroidView( factory = { context -> AppCompatTextView(context) }, update = { it.text = EMOJI_TEXT } ) } } } ) } }
ดูรายละเอียดได้ในเอกสารประกอบของ Interoperability API
การแก้ปัญหา
หากเห็น tofu (☐) แทนอีโมจิ ให้ตรวจสอบก่อนว่าปัญหาเกิดจากอุปกรณ์ทดสอบเครื่องใดเครื่องหนึ่ง สิ่งที่คุณตรวจสอบได้หลักๆ มีดังนี้
- คุณอาจใช้อุปกรณ์ที่แฟลชไปเมื่อเร็วๆ นี้หรือโปรแกรมจำลองใหม่ หากเป็นไปได้ ให้ลองใช้อุปกรณ์ทดสอบจริงเครื่องอื่นที่คุณใช้บ่อยซึ่งลงชื่อเข้าใช้บัญชี Google ไว้ โปรดทราบว่า API ควรมีความยาวไม่เกิน 30 อักขระเพื่อให้อีโมจิทำงานในเวอร์ชันที่ถูกต้อง
- โทรศัพท์ที่ใช้ทดสอบไม่รองรับแบบอักษรที่ดาวน์โหลดได้
- ตรวจสอบเวอร์ชันบริการ Google Play ที่ถูกต้อง
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- ข้อควรพิจารณาอื่นๆ
- ข้อความในโหมดเขียน
- เลื่อน