Emojileri göster

Emoji kullanımı her türden uygulamada hızla arttığı için standart emoji seti Unicode tarafından yılda bir kez güncellenir.

Uygulamanızda internet içeriği gösteriliyorsa veya metin girişi sağlanıyorsa en yeni emoji yazı tiplerini desteklemenizi önemle tavsiye ederiz. Aksi takdirde, sonraki emoji'ler tofu (☐) adı verilen küçük bir kare kutu veya yanlış oluşturulmuş başka emoji dizileri olarak gösterilebilir.

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

Aşağıda modern emojilere örnekler 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 olan eski Android sürümleriyle geriye dönük uyumluluk da dahil olmak üzere en yeni emoji sürümünü destekler.

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

Uygulamanızdaki en yeni emojileri test etmenin en iyi yolu, API 30 veya altı sürümünü çalıştıran gerçek bir cihaz kullanmaktır.

Özel bir emoji çözümü kullanıyorsanız veya başka bir nedenle Oluşturma'da varsayılan emoji çözünürlüğü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ızda aynı Activity içinde hem Views hem de Compose kullanılı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 tarihinden itibaren uzatıldı

Activity, AppCompatActivity yerine Compose ComponentActivity'dan genişliyorsa AppCompat olmadan emoji desteği talimatlarını uygulayın.

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

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 tarihinden itibaren uzatıldı

Activity, AppCompatActivity öğesinden türetilmişse composable işlevleri çağırmak için ComposeView kullanabilirsiniz. Text composable'ları kullandığınızda emojiler Android sürümlerinde doğru şekilde oluşturulur.

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

Bu, XML'yi ş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 metin şişirmek için, emojileri doğru ş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 dokümanlarına bakın.

Sorun giderme

Emoji yerine tofu (☐) görüyorsanız öncelikle sorunun test cihazınıza özgü olup olmadığını kontrol edin. Kontrol edebileceğiniz birkaç ana nokta vardır: