Modern emojileri destekleyin

Emoji kullanımı her uygulama türünde hızla arttığı için standart emoji grubu Unicode tarafından her yıl yenilenir.

Uygulamanız internet içeriği gösteriyorsa veya metin girişi sağlıyorsa en yeni emoji yazı tiplerini desteklemenizi önemle tavsiye ederiz. Aksi takdirde, sonraki emojiler tofu (☐) adlı küçük bir 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üncelleyemediğinden emojileri bu sürümlerde gösteren uygulamalar manuel olarak güncellenmelidir.

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

Örnekler Sürüm
🫠 🫱🏼‍🫲🏿 🫰🏽 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 eski sürümleriyle daha basit geriye dönük uyumluluk sağlar. emoji2 kitaplığı, AppCompat kitaplığının bir bağımlılığıdır ve çalışması için daha fazla yapılandırma gerektirmez.

Oluşturma işleminde emoji desteği

BOM Mart 2023 (Compose kullanıcı arayüzü 1.4), API 21'e kadarki eski Android sürümleriyle geriye dönük uyumluluk dahil olmak üzere en yeni emoji sürümünü destekler. Bu sayfada, modern emojilerin Görünüm sisteminde nasıl yapılandırılacağı ele alınmaktadır. Daha fazla bilgi için Oluşturma bölümünde emoji sayfasına göz atın.

Ön koşullar

Uygulamanızın yeni emojileri düzgün bir şekilde gösterdiğini onaylamak için uygulamayı Android 10 (API düzeyi 29) veya önceki sürümleri çalıştıran bir cihazda başlatın. Bu sayfada, test için gösterebileceğiniz modern emoji'ler bulunmaktadır.

En yeni emojileri desteklemek için AppCompat'ı kullanın

AppCompat 1.4 sürümünde emoji desteği mevcuttur.

Emojileri desteklemek amacıyla AppCompat özelliğini kullanmak için şunları yapın:

  1. Modülünüzün AppCompat kitaplığının 1.4.0-alpha01 veya üzeri bir sürümüne 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 önceki sürümleri çalıştıran bir cihazda başlatıp aşağıdaki test dizesini görüntüleyerek entegrasyonunuzu test edin. Tüm karakterlerin doğru oluşturulduğundan emin olun.

    • 14,0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
    • 13,1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻 summary️
    • 12,1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏼
    • 12,0: 🦩, 🦻🏿, 👩🏼 🤝 👩🏻

Uygulamanız, emoji2 ile uyumlu bir indirilebilir yazı tipi sağlayıcısı sağlayan 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ıyorsa ancak tofu gösteriyorsa (☐)

Bazı durumlarda, AppCompat kitaplığını ekleseniz bile uygulamanızda doğru emoji yerine tofu gösterilebilir. Aşağıda olası açıklamalar ve çözümler verilmiştir.

Uygulamayı yakın zamanda yanıp sönen bir cihazda veya yeni bir emülatörde çalıştırıyorsanız

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

Uygulama verilerini temizlemek için aşağıdakileri yapın:

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

  2. Uygulamalar ve bildirimler'e dokunun.

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

  4. Uygulamalarda gezinin ve 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 öğesini genişletmezseniz veya TextView gibi kodda bir görünüm örneklendirmeniz durumunda ortaya çıkabilir. Aşağıdakileri kontrol edin:

  • Etkinlik, AppCompatActivity boyunca devam ediyor.
  • Kodda görünümü oluşturuyorsanız doğru AppCompat alt sınıfını kullanın.

AppCompatActivity, XML'i şişirirken TextView yerine otomatik olarak AppCompatTextView değerini artırarak XML'inizi güncellemenize gerek kalmaz.

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 seviyesindeki bir emülatör, Google Play Hizmetleri'ni yükseltmemiştir

Önceki API düzeyinde bir emülatör kullanırken yazı tipi sağlayıcısını bulmak amacıyla emoji2 için paket Google Play hizmetlerini güncellemeniz gerekebilir. Bunu yapmak 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. Şu 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 emoji desteği

Uygulamanız AppCompat ekleyemiyorsa doğrudan emoji2 kullanabilir. Bu durum daha fazla çalışma gerektirdiğinden, bu yöntemi yalnızca uygulamanız AppCompat kullanamıyorsa kullanın.

Emojileri AppCompat kitaplığı olmadan 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'ı uygulayan TextView, Button ve EditText alt sınıflarını sağlar. EmojiCompat kodunu zaten uyguladığı için AppCompat içeren uygulamalarda kullanmayın.

  2. XML ve kodda TextView, EditText ya da 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ün eklenmesiyle 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. Daha fazla yapılandırmaya gerek yoktur.

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

    • 14,0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
    • 13,1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻 summary️
    • 12,1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏼
    • 12,0: 🦩, 🦻🏿, 👩🏼 🤝 👩🏻

EmojiCompat'ı widget'lar olmadan kullanın

EmojiCompat, doğru resimleri oluşturmak için EmojiSpan kullanır. Bu nedenle, belirli bir CharSequence nesnesini EmojiSpan nesne içeren bir Spanned nesnesine dönüştürmesi gerekir. EmojiCompat sınıfı, CharSequences örneğini Spanned örneğine 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 alarak uygulamanızın performansını artırabilirsiniz.

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'ı kullanın

EmojiCompat sınıfı, klavyelerin etkileşimde bulundukları uygulamanın desteklediği emojileri oluşturabilmelerini sağlar. Giriş yöntemi düzenleyicileri (IME'ler), 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, resimde hangi emojinin oluşturulacağını belirlemek için uygulamanın desteklediği EmojiCompat sürümünü de kontrol edebilir. Gerekiyorsa sürümü kontrol etmek için klavye, EditorInfo.extras paketinde aşağıdaki tuşları arayabilir:

  • EDITOR_INFO_METAVERSION_KEY: Uygulamanın kullandığı emoji meta verilerinin sürümünü temsil eder. Bu anahtar yoksa uygulama EmojiCompat kullanmıyor demektir.
  • EDITOR_INFO_REPLACE_ALL_KEY: Anahtar varsa ve true değerine ayarlanırsa uygulama, sistemde mevcut olsa bile tüm emojileri değiştirmek için EmojiCompat uygulamasını yapılandırır.

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

Özel görünümlerde emoji kullanma

Uygulamanızda TextView öğesinin doğrudan veya dolaylı alt sınıfları (örneğin, Button, Switch veya EditText) olan özel görünümler varsa ve bu görünümlerin kullanıcı tarafından oluşturulan içeriği gösterebildiği durumlarda her birinin EmojiCompat özelliğini uygulaması gerekir.

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

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 bölgesindeki görüntüleme sayınızı artırmak için kılavuz olarak aşağıdaki tabloyu kullanın:

Süreyi 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 bulunan ve ö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ğini uygulamak için kullandığı yardımcılardır.

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 ekleme talimatlarını uygulayın.

  3. Uygulamanızı Android 10 veya önceki sürümleri çalıştıran bir cihazda başlatıp aşağıdaki test dizesini görüntüleyerek entegrasyonunuzu test edin. Tüm karakterlerin doğru oluşturulduğundan emin olun.

    • 14,0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
    • 13,1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻 summary️
    • 12,1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏼
    • 12,0: 🦩, 🦻🏿, 👩🏼 🤝 👩🏻

Emoji2 kullanımı için isteğe bağlı özellikler

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

Emoji2'yi farklı bir yazı tipi veya indirilebilir yazı tipi sağlayıcı kullanacak şekilde yapılandırın

emoji2 öğesini 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ğıdaki kodu 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ştirin

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

En önemli yapılandırma seçeneği, EmojiCompat ürününün yazı tipini ne zaman yüklediğini kontrol eden setMetadataLoadStrategy()'tır. EmojiCompat.load() çağrılır çağrılmaz yazı tipi yükleme işlemi başlar ve gerekli indirme işlemleri tetiklenir. Uygulamanız, yazı tipi indirme işlemi için bir iş parçacığı oluşturur.

LOAD_STRATEGY_MANUAL, EmojiCompat.load() öğesinin ne zaman çağrıldığını kontrol etmenizi sağlar ve LOAD_STRATEGY_DEFAULT, EmojiCompat.init() çağrısında yüklemenin eşzamanlı olarak başlatılmasını sağlar.

Çoğu uygulama, mesaj dizisini ve yazı tipi yükleme zamanlamasını kontrol edebilmek için LOAD_STRATEGY_MANUAL kullanır. Başlatma gecikmesine yol açmamak için uygulamanızın ilk ekran görüntülenene kadar ertelemesi gerekir. EmojiCompatInitializer, bu uygulamaya uyarak emoji yazı tipinin yüklenmesini ilk ekran devam ettirilene kadar erteler.

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

  • setReplaceAll(): EmojiCompat hizmetinin, bulduğu tüm emojileri EmojiSpan örnekleriyle değiştirip değiştirmeyeceğini belirler. Varsayılan olarak EmojiCompat, sistemin bir emoji oluşturabileceği sonucuna vardığında bu emojinin yerini almaz. true olarak ayarlandığında EmojiCompat tüm emojileri EmojiSpan nesneleriyle değiştirir.
  • setEmojiSpanIndicatorEnabled(): EmojiCompat'in emojiyi bir EmojiSpan nesnesiyle değiştirip değiştirmediğini belirtir. true olarak ayarlandığında EmojiCompat, EmojiSpan için arka plan çizer. Bu yöntem çoğunlukla hata ayıklama amacıyla kullanılır.
  • setEmojiSpanIndicatorColor: Rengi EmojiSpan belirtecek şekilde ayarlar. Varsayılan değer GREEN değeridir.
  • registerInitCallback(): Uygulamayı EmojiCompat başlatma işleminin 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, siz emojileri bir arka plan ileti dizisinde veya özel bir 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 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.

Herhangi bir noktada başlatma durumunu 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 gruplandırılmış yazı tiplerini destekleme

Uygulamanıza bir emoji yazı tipi eklemek için emoji2-bundled yapısını kullanabilirsiniz. Bununla birlikte, NotoColorEmoji yazı tipi 10 MB'tan büyük olduğu için 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 yapılarını dahil et:

    implementation "androidx.emoji2:emoji2:$emojiVersion"
    implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
    
  2. Paketlenmiş yapılandırmayı kullanmak için emoji2 ürününü yapılandırın:

    Kotlin

    EmojiCompat.init(BundledEmojiCompatConfig(context))
    

    Java

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

    • 14,0: 🫠, 🫱🏼 🫲🏿, 🫰🏽
    • 13,1: 😶 🌫️, 🧔🏻 ♀️, 🧑🏿 ❤️ 🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻 summary️
    • 12,1: 🧑🏻 🦰, 🧑🏿 🦯, 👩🏻 🤝 👩🏼
    • 12,0: 🦩, 🦻🏿, 👩🏼 🤝 👩🏻

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

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

Uygulamanızda ilk etkinlik devam ettikten sonra başlatıcı, emoji yazı tipi yüklemesini programlar. Bu kısa gecikme, uygulamanızın arka plandaki iş parçacığına yazı tipi yüklemesi nedeniyle olası bir gecikme olmadan ilk içeriğini görüntülemesini sağlar.

DefaultEmojiCompatConfig, EmojiCompat arayüzünü uygulayan Google Play hizmetleri gibi sistem tarafından yüklenen, indirilebilir bir yazı tipi sağlayıcısı arar. Google Play Hizmetleri tarafından desteklenen cihazlarda bu işlem, yazı tipini Google Play Hizmetleri'ni kullanarak yükler.

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

EmojiCompatInitializer devre dışı bırakılsa bile EmojiCompat öğesinin başlatılmasını erteleyin. EmojiCompat uygulamasını manuel olarak yapılandırırsanız ilk ekran yüklemesinde arka plan çakışmasını önlemek için uygulamanızın ilk ekranını gösterdikten sonra EmojiCompat.load() yöntemini çağırın.

Yükleme sonrasında EmojiCompat, emoji meta verilerini saklamak için yaklaşık 300 KB RAM kullanır.