Modern emojileri destekleyin

Oluşturma yöntemini deneyin
Android için önerilen kullanıcı arayüzü araç seti Jetpack Compose'dur. Oluşturma bölümünde emojileri nasıl destekleyeceğinizi öğrenin.

Emoji kullanımı tüm uygulama türlerinde hızla arttığından standart emoji grubu Unicode tarafından yılda bir kez yenilenir.

Uygulamanız internet içeriği gösteriyorsa veya metin girişi sağlıyorsa en son emoji yazı tiplerini desteklemenizi önemle tavsiye ederiz. Aksi takdirde, sonraki emojiler tofu (☐) adı verilen küçük bir kare kutu veya yanlış oluşturulmuş diğer emoji sıralamaları 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 bu emojileri gösteren uygulamaların manuel olarak güncellenmesi gerekir.

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 önceki 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 başka bir yapılandırma gerektirmez.

Oluşturma bölümünde emoji desteği

Mart 2023 BOM (Oluşturma kullanıcı arayüzü 1.4), API 21'e kadar eski Android sürümleriyle geriye dönük uyumluluk da dahil olmak üzere en son emoji sürümünü destekler. Bu sayfada, View sisteminde modern emojilerin nasıl yapılandırılacağı açıklanmaktadır. Daha fazla bilgi için Oluşturma'da Emoji sayfasına bakın.

Ön koşullar

Uygulamanızın daha yeni emojileri düzgün şekilde görüntülediğ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 emojiler bulunmaktadır.

En son emojileri desteklemek için AppCompat'i kullanma

AppCompat 1.4 sürümünde emoji desteği de bulunmaktadır.

Emoji desteği için AppCompat simgesini kullanmak üzere aşağıdakileri yapın:

  1. Modülünüzün AppCompat kitaplığının 1.4.0-alpha01 veya daha yeni 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 bir sürümü ç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 şekilde oluşturulduğundan emin olun.

    • 14.0: 🫠, 🫱🏼‍🫲🏿, 🫰🏽
    • 13.1: 😶‍🌫️, 🧔🏻‍♀️, 🧑🏿‍❤️‍🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼‍🤝‍👩🏻

Uygulamanız, emoji2 ile 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ıyorsa ancak tofu (☐) gösteriyorsa

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

Uygulamayı kısa süre önce flaşlanmış 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 aşağıdakileri yapın:

  1. Android 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 gezinip Google Play Hizmetleri'ne dokunun.

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

  6. Önbelleği temizle'ye dokunun.

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

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

AppCompatActivity, XML'i şişirirken TextView yerine AppCompatTextView'i otomatik olarak şişirir. Bu nedenle, XML'inizi güncellemeniz gerekmez.

Test telefonu, indirilebilir yazı tiplerini desteklemiyor

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

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

Daha eski bir API düzeyinde bir emülatör kullanırken emoji2'ün yazı tipi sağlayıcıyı bulabilmesi için paketlenmiş Google Play Hizmetleri'ni 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. 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 emoji desteği

Uygulamanız AppCompat içeremez. emoji2 doğrudan kullanılabilir. Bu işlem daha fazla çalışma gerektirdiğinden, bu yöntemi yalnızca uygulamanız AppCompat hizmetini kullanamıyorsa kullanın.

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 kategorisini uygulayan TextView, Button ve EditText alt sınıflarını sağlar. Zaten EmojiCompat uyguladığından, AppCompat içeren bir uygulamada bunu kullanmayın.

  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ü eklendiğinde sistem, uygulama başlatıldıktan kısa süre sonra emoji yazı tipini otomatik olarak yüklemek için varsayılan indirilebilir yazı tipi sağlayıcıyı kullanır. Başka yapılandırma gerekmez.

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

    • 14.0: 🫠, 🫱🏼‍🫲🏿, 🫰🏽
    • 13.1: 😶‍🌫️, 🧔🏻‍♀️, 🧑🏿‍❤️‍🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼 🤝 👩🏻

EmojiCompat'ı widget'lar olmadan kullan

EmojiCompat, doğru resimleri oluşturmak için EmojiSpan değerini 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 process() işlevini arka planda çağırabilir ve sonuçları önbelleğe alabilirsiniz. Bu da uygulamanızın performansını artırır.

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

EmojiCompat sınıfı, klavyelerin etkileşimde bulundukları uygulama tarafından desteklenen emojileri oluşturmasına olanak tanır. Giriş yöntemi düzenleyiciler (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 öğesini alır ve EmojiCompat emojiyi algılayıp oluşturabiliyorsa true değerini döndürür.

Klavye, palette hangi emojinin oluşturulacağını belirlemek için uygulamanın desteklediği EmojiCompat sürümünü de kontrol edebilir. 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ıyordur.
  • EDITOR_INFO_REPLACE_ALL_KEY: Anahtar varsa ve true olarak ayarlanırsa uygulama, sistemde mevcut olsalar bile tüm emojileri değiştirecek şekilde EmojiCompat'yi 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'nin doğrudan veya dolaylı alt sınıfları olan özel görünümler (ör. Button, Switch veya EditText) varsa ve bu görünümler kullanıcı tarafından oluşturulan içerikleri gösterebiliyorsa her biri EmojiCompat'i uygulamalıdır.

İşlem, 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ızda AppCompat kullanılıyorsa platform uygulaması yerine AppCompat uygulamasını genişletin. AppCompat'te görüntülemelerinizi nasıl artıracağınızla ilgili kılavuz olarak aşağıdaki tabloyu kullanın:

Uzantı yerine... Genişletme
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ızda AppCompat kullanılmıyorsa emoji2-views-helper modülündeki özel görünümlerde kullanılmak üzere tasarlanmış görünüm entegrasyon yardımcılarını kullanın. Bunlar, AppCompat kitaplığının emoji desteğini uygulamak için kullandığı yardımcılardır.

AppCompat kullanmayan uygulamalar için özel görünümleri desteklemek üzere 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 önceki bir sürümü ç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 şekilde oluşturulduğundan emin olun.

    • 14.0: 🫠, 🫱🏼‍🫲🏿, 🫰🏽
    • 13.1: 😶‍🌫️, 🧔🏻‍♀️, 🧑🏿‍❤️‍🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼‍🤝‍👩🏻

emoji2'yi işlemeyle ilgili 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ı kullanacak şekilde yapılandırın

emoji2'ü 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. Aşağıdakileri manifest dosyanıza ekleyerek EmojiCompatInitializer seçeneğ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) çağrısı yaparak varsayılan yapılandırmayı kullanın.

    • EmojiCompat.Config simgesini kullanarak yazı tiplerini başka bir kaynaktan 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 bir EmojiCompat.Config örneği kullanabilirsiniz.

En önemli yapılandırma seçeneği, EmojiCompat'ın yazı tipini ne zaman yükleyeceğini kontrol eden setMetadataLoadStrategy() değişkenidir. EmojiCompat.load() çağrıldıktan sonra yazı tipi yükleme işlemi başlar ve gerekli indirmeler tetiklenir. Uygulamanız, yazı tipi indirme işlemi için iş parçacığı oluşturmadığı sürece sistem, iş parçacığı oluşturur.

LOAD_STRATEGY_MANUAL, EmojiCompat.load()'un ne zaman çağrılacağını kontrol etmenize olanak tanır ve LOAD_STRATEGY_DEFAULT, EmojiCompat.init() çağrısında yüklemenin eşzamanlı olarak başlatılmasını sağlar.

Çoğu uygulama, ileti dizisini ve yazı tipi yükleme zamanlamasını kontrol edebilmek için LOAD_STRATEGY_MANUAL kullanır. Uygulamanız, başlatma gecikmesi yaşanmasını önlemek için ilk ekran görüntülenene kadar ertelenmelidir. EmojiCompatInitializer bu uygulamayı takip eder ve emoji yazı tipini yüklemeyi 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'nin, bulduğu tüm emojileri EmojiSpan örnekleriyle değiştirip değiştirmediğini belirler. EmojiCompat, sistemin bir emojiyi oluşturabileceğini anladığında varsayılan olarak bu emojiyi değiştirmez. true olarak ayarlandığında EmojiCompat, tüm emojileri EmojiSpan nesneleriyle değiştirir.
  • setEmojiSpanIndicatorEnabled(): EmojiCompat'ın bir emojiyi EmojiSpan nesnesi ile değiştirip değiştirmediğini belirtir. true olarak ayarlandığında EmojiCompat, EmojiSpan için bir arka plan çizer. Bu yöntem çoğunlukla hata ayıklama amacıyla kullanılır.
  • setEmojiSpanIndicatorColor: Rengi bir EmojiSpan belirtecek şekilde ayarlar. Varsayılan değer GREEN.
  • registerInitCallback(): Bir uygulamayı EmojiCompat başlatma işleminin durumu hakkında bilgilendirir.

İlk kullanıma hazırlama dinleyicileri ekleme

EmojiCompat ve EmojiCompat.Config sınıfları, başlatma geri çağırmalarını kaydetmek ve kayıtlarını iptal etmek için registerInitCallback() ve unregisterInitCallback() yöntemlerini sağlar. Uygulamanız, emojileri arka plan iş parçacığında veya özel bir görünümde işlemeden önce EmojiCompat'ün başlatılmasını beklemek için bu geri çağırma işlevlerini 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. İlklendirme 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 aşağıdaki değerlerden birini döndürür: LOAD_STATE_LOADING, LOAD_STATE_SUCCEEDED veya LOAD_STATE_FAILED.

Emoji2 ile gruplandırılmış yazı tiplerini destekleyin

Uygulamanıza emoji yazı tipi eklemek için emoji2-bundled yapısını kullanabilirsiniz. Ancak NotoColorEmoji yazı tipi 10 MB'tan büyük olduğundan, mümkün olduğunda uygulamanızda indirilebilir yazı tipleri kullanmanızı önemle tavsiye ederiz. emoji2-bundled yapı, 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ı ekleyin:

    implementation "androidx.emoji2:emoji2:$emojiVersion"
    implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
    
  2. emoji2'ü, paketlenmiş yapılandırmayı kullanacak şekilde yapılandırın:

    Kotlin

    EmojiCompat.init(BundledEmojiCompatConfig(context))

    Java

    EmojiCompat.init(new BundledEmojiCompatConfig(context));
  3. emojicompatAppCompat ile veya AppCompat olmadan dahil etmek 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: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼‍🤝‍👩🏻

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

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

Uygulamanızda ilk etkinlik devam ettikten sonra başlatıcı, emoji yazı tipi yüklemeyi planlar. Bu kısa gecikme, uygulamanızın arka plan iş parçacığında yazı tipi yüklenmesinden kaynaklanan olası gecikmeler olmadan ilk içeriğini göstermesine olanak tanır.

DefaultEmojiCompatConfig, Google Play hizmetleri gibi EmojiCompat arayüzünü uygulayan, sisteme yüklenmiş indirilebilir bir yazı tipi sağlayıcı arar. Google Play Hizmetleri tarafından desteklenen cihazlarda bu işlem, Google Play Hizmetleri kullanılarak yazı tipini yükler.

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

EmojiCompatInitializer'u devre dışı bıraksanız bile EmojiCompat'ün başlatılmasını erteleyebilirsiniz. EmojiCompat'u manuel olarak yapılandırırsanız, ilk ekran yüklenirken arka planda çekişmeyi önlemek için uygulamanızın ilk ekranı görüntülendikten sonra EmojiCompat.load()'ı çağırın.

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