Emojileri göster

Tüm uygulama türlerinde emoji kullanımı hızla arttığı için standart emoji seti Unicode tarafından her yıl yenilenir.

Uygulamanız internet içeriği gösteriyor veya metin girişi sağlıyorsa en yeni emoji yazı tiplerini desteklemenizi önemle tavsiye ederiz. Aksi takdirde, daha sonraki emojiler tofu (☐) adı verilen küçük kare kutu veya yanlış oluşturulmuş diğer emoji dizileri olarak gösterilebilir.

Android 11 (API düzeyi 30) ve önceki sürümler emoji yazı tipini güncelleyemez. Bu nedenle, bu sürümlerde emoji gösteren uygulamaların manuel olarak güncellenmesi gerekir.

Aşağıda modern emoji örnekleri verilmiştir.

Örnekler Sürüm
🫩 🪉 🇨🇶 16.0 (Eylül 2024)
🐦‍🔥 🧑‍🧑‍🧒‍🧒 👩🏽‍🦽‍➡️ 🇲🇶 15.1 (Eylül 2023)
🩷 🫸🏼 🐦‍⬛ 15.0 (Eylül 2022)
🫠 🫱🏼‍🫲🏿 🫰🏽 14.0 (Eylül 2021)
😶‍🌫️ 🧔🏻‍♀️ 🧑🏿‍❤️‍🧑🏾 13.1 (Eylül 2020)
🥲 🥷🏿 🐻‍❄️ 13.0 (Mart 2020)
🧑🏻‍🦰 🧑🏿‍🦯 👩🏻‍🤝‍👩🏼 12.1 (Ekim 2019)
🦩 🦻🏿 👩🏼‍🤝‍👩🏻 12.0 (Şubat 2019)

BOM Mart 2023 (Compose UI 1.4), API 21'e kadar eski Android sürümleriyle geriye dönük uyumluluk da dahil olmak üzere en yeni emoji sürümü için destek sunar.

Bu destek için uygulamanızda herhangi bir değişiklik yapmanız gerekmez. Text ve TextField (Material 2 veya Material 3) ya da BasicText ve BasicTextField kullanıyorsanız modern emoji desteğinden hemen yararlanabilirsiniz.

Uygulamanızda en yeni emojileri test etmenin en iyi yolu, API 30 veya daha eski bir sürümde gerçek bir cihaz kullanmaktır.

Özel bir emoji çözümü kullanıyorsanız veya başka bir nedenle Compose'da varsayılan emoji çözümünü devre dışı bırakmanız gerekiyorsa PlatformTextStyle(emojiSupportMatch) kullanabilirsiniz:

Text(
    text = "Hello $EMOJI_TEXT",
    style = TextStyle(
        platformStyle = PlatformTextStyle(
            emojiSupportMatch = EmojiSupportMatch.None
        )/* ... */
    )
)

Birlikte çalışabilirlik

Uygulamanız aynı Activity içinde hem Görünümler'i hem de Oluşturma'yı kullanıyorsa emojileri doğru şekilde yapılandırmak için uygun API'leri kullandığınızdan emin olun. Aşağıdaki bölümlerde, her bir API'nin ne zaman kullanılacağı açıklanmaktadır.

ComponentActivity zaman damgasından itibaren uzatılıyor

Activity sınıfınız AppCompatActivity yerine Compose ComponentActivity sınıfını genişletiyorsa AppCompat olmadan emoji desteği talimatlarını uygulayın.

AppCompatActivity sınıfını genişletmediğiniz için bağımlılıklarınıza Emoji2 kitaplığını ekleyin ve görünümlerinizde TextView widget'ı yerine EmojiTextView sınıfını kullanın. Bu işlemi aşağıdaki snippet'te gösterildiği gibi yapabilirsiniz:

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
            }
        }
    }
}

Ardından, XML dosyanızda:

<androidx.emoji2.widget.EmojiTextView
    android:id="@+id/emoji_text_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />

AppCompatActivity zaman damgasından itibaren uzatılıyor

Activity sınıfınız AppCompatActivity sınıfından türetiliyorsa composable işlevleri çağırmak için ComposeView kullanabilirsiniz. Metin composable'ları kullandığınızda emojiler Android sürümlerinde doğru şekilde oluşturulur.

AppCompatActivity sınıfını genişletiyorsanız emojilerin doğru şekilde oluşturulması için XML'den TextView öğesini genişletin.

Bu, XML'i şişiriyorsanız geçerlidir:

  • ComposeView dışında, Activity içinde. Aşağıdaki snippet'te AppCompatActivity ve TextView kullanımına dikkat edin:

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
            }
        }
    }
}

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
                        }
                    }
                }
            }
        )
    }
}

ComposeView içinde AndroidView ile bir metni genişletmek için emojileri düzgün şekilde oluşturmak üzere AppCompatTextView kullanın:

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 }
                        )
                    }
                }
            }
        )
    }
}

Ayrıntılar için Birlikte çalışabilirlik API'leri belgelerine bakın.

Sorun giderme

Emoji yerine tofu (☐) görüyorsanız öncelikle sorunun test cihazınızdan kaynaklanıp kaynaklanmadığını kontrol edin. Kontrol edebileceğiniz birkaç ana nokta vardır: