Modern emojileri destekleyin

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

Uygulamanız internet içeriği görüntülüyorsa veya metin girişi sağlıyorsa en yeni emoji yazı tiplerini desteklemenizi önemle tavsiye ederiz. Aksi takdirde, daha sonraki emoji'ler tofu (☐) adı verilen küçük kare bir kutu veya yanlış oluşturulmuş başka emoji dizileri şeklinde 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 yapılandırma gerekmez.

Oluşturma özelliğinde emoji desteği

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ünü destekler. Bu sayfada, modern emojilerin View sisteminde 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ö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 emojiler bulunmaktadır.

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

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

AppCompat özelliğini kullanarak emojileri desteklemek için aşağıdakileri yapın:

  1. Modülünüzün AppCompat kitaplığının 1.4.0-alpha01 veya sonraki 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 şekilde oluşturulduğundan emin olun.

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

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

Uygulamanızda AppCompat kullanılıyorsa ancak tofu gösteriliyorsa (☐)

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 güncellenen bir cihazda veya yeni bir emülatörde çalıştırıyorsunuz

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 sonra 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'e 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ızda AppCompat metinle ilgili bir sınıf kullanılmıyor

Bu durum, AppCompatActivity öğesini genişletmezseniz veya TextView gibi bir kodda görüntüleme örneği oluşturursanız meydana gelebilir. Şunları kontrol edin:

  • Etkinliğin geçerlilik süresi AppCompatActivity tarihinde sona eriyor.
  • Görünümü kodda 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ırır. Böylece 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

Önceki bir API düzeyinde emülatör kullanırken, yazı tipi sağlayıcıyı bulmak amacıyla emoji2 için paket halinde sunulan Google Play hizmetlerini güncellemeniz 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 olup olmadığını kontrol edin.

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 dosyalarını 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ünü dahil eden sistem, varsayılan indirilebilir yazı tipi sağlayıcısını kullanarak uygulama başlatıldıktan kısa bir süre sonra emoji yazı tipini otomatik olarak yükler. Başka bir yapılandırmaya gerek yoktur.

  3. Entegrasyonunuzu test etmek için uygulamanızı Android 11 veya önceki sürümleri ç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.

    • 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 nesne 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() 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 emojiyi oluşturmasını sağlar. Giriş yöntemi düzenleyicileri (IME'ler), EmojiCompat örneklerinin emoji oluşturup oluşturamadığı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.

Palette hangi emojinin oluşturulacağını belirlemek için klavye, 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 bir örneğini 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ı (ör. Button, Switch veya EditText) olan özel görünümler varsa ve bu görünümler kullanıcı tarafından oluşturulan içeriği gösterebiliyorsa her birinin EmojiCompat uygulaması gerekir.

İş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 bölgesinde görünümlerinizi nasıl genişleteceğiniz konusunda aşağıdaki tablodan kılavuz olarak yararlanı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 olmayan 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ış 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 uygulamalarda özel görünümleri desteklemek için aşağıdaki adımları uygulayı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 kodunu eklemek için talimatları 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 şekilde oluşturulduğundan emin olun.

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

Emoji2'nin kullanımı 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ı kullanacak şekilde yapılandırın

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

  1. Manifest dosyanıza aşağıdakileri ekleyerek EmojiCompatInitializer'i 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 kullanarak başka bir kaynaktaki yazı tiplerini yüklemek için kendi yapılandırmanızı oluşturun. Bu sınıf, aşağıdaki bölümde açıklandığı üzere 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 EmojiCompat.Config örneği kullanabilirsiniz.

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

LOAD_STRATEGY_MANUAL, EmojiCompat.load() çağrıldığında kontrol etmenizi sağlar ve LOAD_STRATEGY_DEFAULT, EmojiCompat.init() çağrısında yüklemeyi eşzamanlı olarak başlatır.

Çoğu uygulama, ileti dizisini ve yazı tipi yükleme zamanlamasını kontrol edebilmek için LOAD_STRATEGY_MANUAL kullanır. Başlatma gecikmesinin oluşmaması için uygulamanızın, ilk ekran görüntülenene kadar ertelenmesi gerekir. EmojiCompatInitializer bu uygulamayı uygular ve emoji yazı tipinin yüklenmesini ilk ekran devam ettirilene kadar erteler.

Yapılandırmanın diğer özelliklerini 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 emoji oluşturabileceğine karar verirse varsayılan olarak söz konusu emojinin yerine geçmez. true olarak ayarlandığında EmojiCompat, tüm emojileri EmojiSpan nesneyle değiştirir.
  • setEmojiSpanIndicatorEnabled(): EmojiCompat öğesinin, bir emojiyi EmojiSpan nesnesiyle 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 değeridir.
  • registerInitCallback(): Uygulamayı EmojiCompat başlatma işleminin durumu hakkında bilgilendirir.

İlk kullanıma hazırlama işleyicileri ekleyin

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 bir arka plan ileti dizisinde 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ı örneğinde geçin. 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.

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ızda bir emoji yazı tipini paket haline getirmek için emoji2-bundled yapısını kullanabilirsiniz. Bununla birlikte, NotoColorEmoji yazı tipi 10 MB'tan büyük olduğundan uygulamanızda mümkünse indirilebilir yazı tipleri kullanmanızı ö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. Paket halinde sunulan yapılandırmayı kullanmak için emoji2 hizmetini yapılandırın:

    Kotlin

    EmojiCompat.init(BundledEmojiCompatConfig(context))
    

    Java

    EmojiCompat.init(new BundledEmojiCompatConfig(context));
    
  3. AppCompat ile veya AppCompat olmadan emojicompat dahil etmeyle ilgili önceki adımları uygulayarak entegrasyonu test edin. Test dizesinin doğru 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) kullanarak varsayılan yapılandırmayı uygular.

Başlatıcı, uygulamanızda ilk etkinlik devam ettirildikten sonra emoji yazı tipi yüklemeyi planlar. Bu kısa gecikme, uygulamanızın, arka plandaki bir ileti dizisinde yazı tipi yüklenmesi nedeniyle olası herhangi bir gecikme olmadan ilk içeriğini göstermesini sağlar.

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

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

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

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