Modern emojileri destekleyin

Compose yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Compose'da emojileri nasıl destekleyeceğinizi öğrenin.

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)

androidx.emoji2:emoji2 kitaplığı, Android'in daha eski sürümleriyle daha basit bir geriye dönük uyumluluk sağlar. emoji2 kitaplığı, AppCompat kitaplığının bir bağımlılığıdır ve çalışması için başka bir yapılandırma gerektirmez.

Compose'da emoji desteği

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ü için destek sunar. Bu sayfada, modern emojilerin View sisteminde nasıl yapılandırılacağı açıklanmaktadır. Daha fazla bilgi için Compose'da emoji sayfasını inceleyin.

Ön koşullar

Uygulamanızın yeni emojileri düzgün şekilde gösterdiğini doğrulamak için uygulamayı Android 10 (API düzeyi 29) veya daha eski bir sürümün yüklü olduğu bir cihazda başlatın. Bu sayfada, test için görüntüleyebileceğiniz modern emojiler yer alır.

En yeni emojileri desteklemek için AppCompat'i kullanma

AppCompat 1.4, emoji desteği içerir.

Emojileri desteklemek için AppCompat kullanmak istiyorsanız aşağıdakileri yapın:

  1. Modülünüzün AppCompat kitaplık sürümü 1.4.0-alpha01 veya daha yeni bir sürüme bağlı olduğundan emin olun.

    build.gradle
    
    // Ensure version is 1.4.0-alpha01 or higher.
    implementation "androidx.appcompat:appcompat.$appcompatVersion"
    
  2. Metin gösteren tüm etkinliklerin AppCompatActivity sınıfını genişlettiğinden emin olun.

    Kotlin

    MyActivity.kt
    
    class MyActivity: AppCompatActivity {
    ...
    }

    Java

    MyActivity.java
    
    class MyActivity extends AppCompatActivity {
    ...
    }
  3. Uygulamanızı Android 10 veya daha eski bir sürümün yüklü olduğu bir cihazda başlatıp aşağıdaki test dizesini görüntüleyerek entegrasyonunuzu test edin. Tüm karakterlerin doğru şekilde oluşturulduğundan emin olun.

    • 16.0: 🫩, 🪉, 🇨🇶
    • 15.1: 🐦‍🔥, 🧑‍🧑‍🧒‍🧒, 👩🏽‍🦽‍➡️, 🇲🇶
    • 15.0: 🩷, 🫸🏼, 🐦‍⬛
    • 14.0: 🫠, 🫱🏼‍🫲🏿, 🫰🏽
    • 13.1: 😶‍🌫️, 🧔🏻‍♀️, 🧑🏿‍❤️‍🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼‍🤝‍👩🏻

Uygulamanız, emoji2 uyumlu indirilebilir yazı tipi sağlayıcısı sunan tüm cihazlarda (ör. Google Play Hizmetleri tarafından desteklenen cihazlar) geriye dönük uyumlu emojileri otomatik olarak gösterir.

Uygulamanız AppCompat kullanıyor ancak tofu (☐) gösteriyorsa

Bazı durumlarda, AppCompat kitaplığını ekleseniz bile uygulamanız doğru emoji yerine tofu gösterebilir. Aşağıda olası açıklamalar ve çözümler yer almaktadır.

Uygulamayı yeni yüklenmiş bir cihazda veya yeni bir emülatörde çalıştırıyorsanız

Başlatma sırasında oluşabilecek yazı tipi önbelleğe alma işlemlerini temizlemek için uygulamanın Google Play Hizmetleri verilerini temizleyin. Bu işlem genellikle birkaç saat içinde sorunu çözer.

Uygulama verilerini temizlemek için şunları yapın:

  1. Android destekli cihazınızda Ayarlar'ı açın.

  2. Uygulamalar ve bildirimler'e dokunun.

  3. Tüm uygulamaları göster veya Uygulama bilgileri'ne dokunun.

  4. Uygulamalar arasında ilerleyip Google Play Hizmetleri'ne dokunun.

  5. Depolama alanı ve önbellek'e dokunun.

  6. Önbelleği temizle'ye dokunun.

Uygulamanız, AppCompat metinle ilgili bir sınıf kullanmıyor

Bu durum, AppCompatActivity sınıfını genişletmezseniz veya kodda bir görünümü örneklendirirseniz (ör. TextView) ortaya çıkabilir. Aşağıdakileri kontrol edin:

AppCompatActivity, XML'i genişletirken TextView yerine AppCompatTextView öğesini otomatik olarak genişletir. Bu nedenle XML'inizi güncellemeniz gerekmez.

Test telefonu, indirilebilir yazı tiplerini desteklemiyor.

DefaultEmojiCompatConfig.create işlevinin boş olmayan bir yapılandırma döndürdüğünü doğrulayın.

Daha eski bir API düzeyindeki emülatör, Google Play Hizmetleri'ni yükseltmedi.

Daha eski bir API düzeyinde emülatör kullanırken emoji2 için paket halinde sunulan Google Play Hizmetleri'ni güncelleyerek yazı tipi sağlayıcısını bulmanız gerekebilir. Bunun için emülatörde Google Play Store'a giriş yapın.

Uyumlu bir sürümün yüklü olduğunu doğrulamak için aşağıdakileri yapın:

  1. Aşağıdaki komutu çalıştırın:

    adb shell dumpsys package com.google.android.gms | grep version
    
  2. versionCode değerinin 211200000 değerinden yüksek olduğundan emin olun.

AppCompat olmadan emojileri destekleme

Uygulamanız AppCompat'ı içeremiyorsa doğrudan emoji2 kullanabilir. Bu yöntem daha fazla çalışma gerektirdiğinden yalnızca uygulamanız AppCompat yöntemini kullanamıyorsa tercih edilmelidir.

AppCompat kitaplığı olmadan emojileri desteklemek için aşağıdakileri yapın:

  1. Uygulamanızın build.gradle dosyasına emoji2 ve emoji2-views öğelerini ekleyin.

    build.gradle
    
    def emojiVersion = "1.0.0-alpha03"
    implementation "androidx.emoji2:emoji2:$emojiVersion"
    implementation "androidx.emoji2:emoji2-views:$emojiVersion"
    

    emoji2-views modülü, EmojiCompat'yi uygulayan TextView, Button ve EditText alt sınıflarını sağlar. AppCompat içeren bir uygulamada kullanmayın. Bu uygulama zaten EmojiCompat'i uygular.

  2. XML ve kodda TextView, EditText veya Button kullandığınız her yerde bunun yerine EmojiTextView, EmojiEditText veya EmojiButton kullanın.

    activity_main.xml
    
    <androidx.emoji2.widget.EmojiTextView ... />
    <androidx.emoji2.widget.EmojiEditText ... />
    <androidx.emoji2.widget.EmojiButton ... />
    

    emoji2 modülünü eklediğinizde sistem, uygulama başlatıldıktan kısa bir süre sonra emoji yazı tipini otomatik olarak yüklemek için varsayılan indirilebilir yazı tipi sağlayıcısını kullanır. Başka bir yapılandırma gerekmez.

  3. Entegrasyonunuzu test etmek için uygulamanızı Android 11 veya daha eski bir sürümü çalıştıran ve aşağıdaki test dizelerini gösteren bir cihazda başlatın. Tüm karakterlerin doğru şekilde oluşturulduğundan emin olun.

    • 16.0: 🫩, 🪉, 🇨🇶
    • 15.1: 🐦‍🔥, 🧑‍🧑‍🧒‍🧒, 👩🏽‍🦽‍➡️, 🇲🇶
    • 15.0: 🩷, 🫸🏼, 🐦‍⬛
    • 14.0: 🫠, 🫱🏼‍🫲🏿, 🫰🏽
    • 13.1: 😶‍🌫️, 🧔🏻‍♀️, 🧑🏿‍❤️‍🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼‍🤝‍👩🏻

EmojiCompat'i widget'lar olmadan kullanma

EmojiCompat, doğru resimleri oluşturmak için EmojiSpan kullanır. Bu nedenle, belirli bir CharSequence nesnesini EmojiSpan nesneleri içeren bir Spanned nesnesine dönüştürmesi gerekir. EmojiCompat sınıfı, CharSequences öğesini Spanned örneklerine dönüştürmek için process() yöntemini sağlar. Bu yöntemi kullanarak arka planda process() yöntemini çağırabilir ve sonuçları önbelleğe alabilirsiniz. Bu sayede uygulamanızın performansı artar.

Kotlin

val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")

Java

CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");

Giriş yöntemi düzenleyicileri için EmojiCompat'i kullanma

EmojiCompat sınıfı, klavyelerin etkileşimde bulundukları uygulama tarafından desteklenen emojileri oluşturmasına olanak tanır. Giriş yöntemi düzenleyicileri (IME'ler), bir EmojiCompat örneğinin emoji oluşturup oluşturamayacağını kontrol etmek için getEmojiMatch() yöntemini kullanabilir. Bu yöntem, bir emojinin CharSequence değerini alır ve EmojiCompat emojiyi algılayıp oluşturabiliyorsa true değerini döndürür.

Klavye, palette hangi emojinin gösterileceğini belirlemek için uygulamanın desteklediği EmojiCompat sürümünü de kontrol edebilir. Klavye, sürümü kontrol etmek için (varsa) EditorInfo.extras paketinde aşağıdaki anahtarları arayabilir:

  • EDITOR_INFO_METAVERSION_KEY: Uygulamanın kullandığı emoji meta verilerinin sürümünü temsil eder. Bu anahtar yoksa uygulama EmojiCompat kullanmıyordur.
  • EDITOR_INFO_REPLACE_ALL_KEY: Anahtar mevcutsa ve true olarak ayarlanmışsa uygulama, sistemde mevcut olsalar bile tüm emojileri değiştirmek için EmojiCompat öğesini yapılandırır.

EmojiCompat örneğini yapılandırma hakkında daha fazla bilgi edinin.

Özel görünümlerde emoji kullanma

Uygulamanızda TextView sınıfının doğrudan veya dolaylı alt sınıfları olan özel görünümler varsa (ör. Button, Switch veya EditText) ve bu görünümler kullanıcı tarafından oluşturulan içerikleri gösterebiliyorsa her birinin EmojiCompat arayüzünü uygulaması gerekir.

Süreç, uygulamanızın AppCompat kitaplığını kullanıp kullanmadığına bağlı olarak değişir.

AppCompat ile uygulamalar için özel görünümler ekleme

Uygulamanız AppCompat kullanıyorsa platform uygulaması yerine AppCompat uygulamasını genişletin. AppCompat'da görünümlerinizi nasıl genişleteceğiniz konusunda rehber olarak aşağıdaki tabloyu kullanın:

Uzatmak yerine... Uzat
TextView AppCompatTextView
EditText AppCompatEditText
ToggleButton AppCompatToggleButton
Switch SwitchCompat
Button AppCompatButton
CheckedTextView AppCompatCheckedTextView
RadioButton AppCompatRadioButton
CheckBox AppCompatCheckBox
AutoCompleteTextView AppCompatAutoCompleteTextView
MultiAutoCompleteTextView AppCompatMultiAutoCompleteTextView

AppCompat içermeyen uygulamalar için özel görünümler ekleme

Uygulamanız AppCompat kullanmıyorsa emoji2-views-helper modülünde özel görünümlerde kullanılmak üzere tasarlanmış görünüm entegrasyonu yardımcılarını kullanın. Bunlar, AppCompat kitaplığının emoji desteği uygulamak için kullandığı yardımcı öğelerdir.

AppCompat kullanmayan uygulamalarda özel görünümleri desteklemek için aşağıdaki adımları tamamlayın.

  1. emoji2-views-helper kitaplığını ekleyin:

    implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
    
  2. Uygulamanızın özel görünümlerine EmojiTextViewHelper veya EmojiEditTextHelper eklemek için talimatları uygulayın.

  3. Uygulamanızı Android 10 veya daha eski bir sürümün yüklü olduğu bir cihazda başlatıp aşağıdaki test dizesini görüntüleyerek entegrasyonunuzu test edin. Tüm karakterlerin doğru şekilde oluşturulduğundan emin olun.

    • 16.0: 🫩, 🪉, 🇨🇶
    • 15.1: 🐦‍🔥, 🧑‍🧑‍🧒‍🧒, 👩🏽‍🦽‍➡️, 🇲🇶
    • 15.0: 🩷, 🫸🏼, 🐦‍⬛
    • 14.0: 🫠, 🫱🏼‍🫲🏿, 🫰🏽
    • 13.1: 😶‍🌫️, 🧔🏻‍♀️, 🧑🏿‍❤️‍🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼‍🤝‍👩🏻

Emoji2'yi işlemek için isteğe bağlı özellikler

emoji2 kitaplığını uygulamanıza ekledikten sonra bu bölümde açıklanan isteğe bağlı özellikleri ekleyebilirsiniz.

emoji2'yi farklı bir yazı tipi veya indirilebilir yazı tipi sağlayıcısı kullanacak şekilde yapılandırma

emoji2 uygulamasını farklı bir yazı tipi veya indirilebilir yazı tipi sağlayıcısı kullanacak şekilde yapılandırmak için aşağıdakileri yapın:

  1. Manifest dosyanıza aşağıdakileri ekleyerek EmojiCompatInitializer özelliğini devre dışı bırakın:

    <provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">
    <meta-data android:name="androidx.emoji2.text.EmojiCompatInitializer"
               tools:node="remove" />
    </provider>
  2. Aşağıdakilerden birini yapın:

    • DefaultEmojiCompatConfiguration.create(context) yöntemini çağırarak varsayılan yapılandırmayı kullanın.

    • EmojiCompat.Config kullanarak başka bir kaynaktan yazı tipi yüklemek için kendi yapılandırmanızı oluşturun. Bu sınıf, aşağıdaki bölümde açıklandığı gibi EmojiCompat davranışınızı değiştirmek için çeşitli seçenekler sunar.

EmojiCompat davranışınızı değiştirme

EmojiCompat davranışını değiştirmek için EmojiCompat.Config örneğini kullanabilirsiniz.

En önemli yapılandırma seçeneği, EmojiCompat uygulamasının yazı tipini ne zaman yükleyeceğini kontrol eden setMetadataLoadStrategy() seçeneğidir. Yazı tipi yükleme işlemi, EmojiCompat.load() çağrılır çağrılmaz başlar ve bu, gerekli indirme işlemlerini tetikler. Uygulamanız bir iş parçacığı sağlamadığı sürece sistem, yazı tipi indirme işlemi için bir iş parçacığı oluşturur.

LOAD_STRATEGY_MANUAL, EmojiCompat.load() işlevinin ne zaman çağrılacağını kontrol etmenizi sağlar ve LOAD_STRATEGY_DEFAULT, EmojiCompat.init() çağrısında yüklemenin eşzamanlı olarak başlamasını sağlar.

Çoğu uygulama, yazı tipi yükleme işleminin iş parçacığını ve zamanlamasını kontrol edebilmek için LOAD_STRATEGY_MANUAL kullanır. Uygulamanız, başlatma gecikmesine neden olmamak için ilk ekran görüntülenene kadar beklemelidir. EmojiCompatInitializer bu uygulamayı takip eder ve emoji yazı tipinin yüklenmesini ilk ekran devam edene kadar erteler.

Yapılandırmanın diğer yönlerini ayarlamak için temel sınıftaki aşağıdaki yöntemleri kullanın:

  • setReplaceAll(): EmojiCompat işlevinin, bulduğu tüm emojileri EmojiSpan örnekleriyle değiştirip değiştirmeyeceğini belirler. Varsayılan olarak, EmojiCompat sistemin bir emojiyi oluşturabileceğini tahmin ettiğinde o emojiyi değiştirmez. true olarak ayarlandığında EmojiCompat, tüm emojileri EmojiSpan nesneleriyle değiştirir.
  • setEmojiSpanIndicatorEnabled(): EmojiCompat özelliğinin bir emojiyi EmojiSpan nesnesiyle değiştirip değiştirmeyeceğini belirtir. true olarak ayarlandığında EmojiCompat, EmojiSpan için bir arka plan çizer. Bu yöntem, genellikle hata ayıklama amacıyla kullanılır.
  • setEmojiSpanIndicatorColor: Rengi EmojiSpan gösterecek şekilde ayarlar. Varsayılan değer: GREEN.
  • registerInitCallback(): Uygulamayı EmojiCompat başlatma durumu hakkında bilgilendirir.

Başlatma işleyicileri ekleme

EmojiCompat ve EmojiCompat.Config sınıfları, başlatma geri çağırmalarını kaydetmek ve kaydını iptal etmek için registerInitCallback() ve unregisterInitCallback() yöntemlerini sağlar. Uygulamanız, emojiyi bir arka plan iş parçacığında veya özel görünümde işlemeden önce EmojiCompat başlatılana kadar beklemek için bu geri çağırmaları kullanır.

Bu yöntemleri kullanmak için EmojiCompat.InitCallback sınıfının bir örneğini oluşturun. Bu yöntemleri çağırın ve EmojiCompat.InitCallback sınıfının örneğini iletin. Başlatma işlemi başarılı olduğunda EmojiCompat sınıfı, onInitialized() yöntemini çağırır. Kitaplık başlatılamazsa EmojiCompat sınıfı, onFailed() yöntemini çağırır.

Başlatma durumunu istediğiniz zaman kontrol etmek için getLoadState() yöntemini çağırın. Bu yöntem şu değerlerden birini döndürür: LOAD_STATE_LOADING, LOAD_STATE_SUCCEEDED, veya LOAD_STATE_FAILED.

Emoji2 ile paket yazı tiplerini destekleme

emoji2-bundled yapısını kullanarak uygulamanıza emoji yazı tipi ekleyebilirsiniz. Ancak NotoColorEmoji yazı tipi 10 MB'tan büyük olduğundan, uygulamanızın mümkün olduğunda indirilebilir yazı tipleri kullanmasını önemle tavsiye ederiz. emoji2-bundled yapısı, indirilebilir yazı tiplerini desteklemeyen cihazlardaki uygulamalar için tasarlanmıştır.

emoji2-bundled yapısını kullanmak için aşağıdakileri yapın:

  1. emoji2-bundled ve emoji2 çıktılarını dahil etme:

    implementation "androidx.emoji2:emoji2:$emojiVersion"
    implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
    
  2. emoji2 öğesini, paket yapılandırmayı kullanacak şekilde yapılandırın:

    Kotlin

    EmojiCompat.init(BundledEmojiCompatConfig(context))

    Java

    EmojiCompat.init(new BundledEmojiCompatConfig(context));
  3. AppCompat ile veya olmadan emojicompat eklemeye yönelik önceki adımları uygulayarak entegrasyonu test edin. Test dizesinin doğru şekilde görüntülendiğinden emin olun.

    • 16.0: 🫩, 🪉, 🇨🇶
    • 15.1: 🐦‍🔥, 🧑‍🧑‍🧒‍🧒, 👩🏽‍🦽‍➡️, 🇲🇶
    • 15.0: 🩷, 🫸🏼, 🐦‍⬛
    • 14.0: 🫠, 🫱🏼‍🫲🏿, 🫰🏽
    • 13.1: 😶‍🌫️, 🧔🏻‍♀️, 🧑🏿‍❤️‍🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼‍🤝‍👩🏻

Otomatik EmojiCompat yapılandırmasının etkisi

Sistem, başlangıç kitaplığını (EmojiCompatInitializer) ve DefaultEmojiCompatConfig'yi kullanarak varsayılan yapılandırmayı uygular.

Uygulamanızda ilk etkinlik devam ettirildikten sonra başlatıcı, emoji yazı tipi yüklemesini planlar. Bu kısa gecikme, uygulamanızın ilk içeriğini, arka plan iş parçacığında yazı tipi yüklemesinden kaynaklanan olası bir gecikme olmadan görüntülemesini sağlar.

DefaultEmojiCompatConfig, Google Play Hizmetleri gibi EmojiCompat arayüzünü uygulayan, sisteme yüklenmiş indirilebilir yazı tipi sağlayıcı arar. Google Play Hizmetleri tarafından desteklenen cihazlarda bu, Google Play Hizmetleri'ni kullanarak yazı tipini yükler.

Başlatıcı, emoji yazı tipini yüklemek için bir arka plan iş parçacığı oluşturur ve yazı tipi indirme işlemi, zaman aşımına uğramadan önce 10 saniye kadar sürebilir. Yazı tipi indirildikten sonra EmojiCompat başlatılması arka plan iş parçacığında yaklaşık 150 milisaniye sürer.

EmojiCompatInitializer özelliğini devre dışı bıraksanız bile EmojiCompat özelliğinin başlatılmasını erteleyin. Manuel olarak yapılandırırsanız EmojiCompat, uygulamanızın ilk ekranı görüntülendikten sonra EmojiCompat.load() yöntemini çağırın. Böylece ilk ekran yüklenirken arka planda çakışma yaşanmaz.

Yüklendikten sonra EmojiCompat, emoji meta verilerini tutmak için yaklaşık 300 KB RAM kullanır.