Modern emojileri destekleyin

Yazma yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Oluşturma bölümünde emoji desteğini nasıl etkinleştireceğinizi öğrenin.

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)

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 bağımlılığıdır ve çalışmak için başka yapılandırma gerektirmez.

Oluşturma bölümünde 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ünü destekler. Bu sayfada, Görüntüleme sisteminde modern emojilerin nasıl yapılandırılacağı açıklanmaktadır. Daha fazla bilgi için Emoji in Compose (Oluşturma sırasında emoji) sayfasına bakın.

Ön koşullar

Uygulamanızın yeni emojileri düzgün şekilde gösterdiğini onaylamak 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.

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

  1. Modülünüzün AppCompat kitaplığının 1.4.0-alpha01 veya daha yüksek bir sürümüne bağımlı 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.

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

Uygulamanız, emoji2 ile uyumlu indirilebilir yazı tipi sağlayıcı 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ı eklemiş olsanız 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 flash'lenmiş bir cihazda veya yeni bir emülatörde çalıştırıyorsunuz

Başlangıç sırasında oluşabilecek yazı tipi önbelleğe almayı 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 destekli cihazınızda Ayarlar'ı açın.

  2. Uygulamalar ve bildirimler'e dokunun.

  3. Tüm uygulamaları göster veya Uygulama bilgisi'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ızda AppCompat ile ilgili bir metin sınıfı kullanılmıyor

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

XML'yi genişletirken AppCompatActivity, TextView yerine otomatik olarak AppCompatTextView değerini ekler. Bu nedenle XML'nizi güncellemeniz gerekmez.

Test telefonu, indirilebilir yazı tiplerini desteklemiyor

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

Daha eski bir API düzeyindeki emülatörde Google Play Hizmetleri güncellenmemiştir.

Daha eski bir API düzeyinde emülatör kullanırken yazı tipi sağlayıcıyı bulmak için emoji2 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üklendiğini 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'yı içeremiyorsa doğrudan emoji2'yı kullanabilir. Bu yöntem daha fazla çalışma gerektirir. Bu nedenle, yalnızca uygulamanız AppCompat kullanamıyorsa bu yöntemi kullanın.

AppCompat kitaplığı olmadan emoji desteği için aşağıdakileri yapın:

  1. Uygulamanızın build.gradle dosyasında emoji2 ve emoji2-views değerlerini 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. AppCompat uygulayan bir uygulamada kullanmayın. Çünkü bu uygulama zaten EmojiCompat'yi 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 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ü ç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, herhangi bir CharSequence nesneyi EmojiSpan nesneleri içeren bir Spanned nesnesine dönüştürmesi gerekir. EmojiCompat sınıfı, process() yöntemini kullanarak CharSequences karakterlerini Spanned örneklerine dönüştürür. Bu yöntemi kullanarak process() işlevini arka planda ç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üzenleyiciler 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üzenleyiciler (IME'ler), EmojiCompat örneğinin emoji oluşturup oluşturamayacağını kontrol etmek için getEmojiMatch() yöntemini kullanabilir. Bu yöntem, CharSequence emoji alır ve EmojiCompat, emojiyi algılayıp oluşturabiliyorsa true değerini döndürür.

Klavye, paletinde hangi emojilerin oluşturulacağını 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ü gösterir. Bu anahtar yoksa uygulama EmojiCompat kullanmıyordur.
  • EDITOR_INFO_REPLACE_ALL_KEY: Anahtar varsa ve true olarak ayarlanmışsa uygulama, sistemde mevcut olsalar bile tüm emojileri değiştirmek için EmojiCompat 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 öğesinin 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ümlerde kullanıcı tarafından oluşturulan içerikler gösterilebiliyorsa her bir görünüm EmojiCompat öğesini uygulamalıdır.

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'daki görünümlerinizi nasıl uzatacağınızla ilgili 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'in bulunmadığı 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 entegrasyonu yardımcılarını kullanın. Bunlar, AppCompat kitaplığının emoji desteğini uygulamak için kullandığı yardımcı programlardı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 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.

    • 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ı kullanacak şekilde yapılandırma

emoji2'yı 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 ö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) işlevini çağırarak varsayılan yapılandırmayı kullanın.

    • EmojiCompat.Config 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 davranışınızı değiştirmek için çeşitli seçenekler sunar. EmojiCompat

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, setMetadataLoadStrategy()'dir. Bu seçenek, EmojiCompat'nin yazı tipini ne zaman yükleyeceğini kontrol eder. Yazı tipi yükleme işlemi EmojiCompat.load() çağrılır çağrılmaz başlar ve gerekli indirmeler tetiklenir. Uygulamanız bir ileti dizisi sağlamadığı sürece sistem, yazı tipi indirme için bir ileti dizisi oluşturur.

LOAD_STRATEGY_MANUAL, EmojiCompat.load() işlevinin ne zaman çağrılacağını kontrol etmenize olanak tanır ve LOAD_STRATEGY_DEFAULT, EmojiCompat.init() işlevine yapılan çağrıda yüklemenin eşzamanlı olarak başlamasını sağlar.

Çoğu uygulama, yazı tipi yükleme iş parçacığını ve zamanlamasını kontrol edebilmek için LOAD_STRATEGY_MANUAL kullanır. Uygulamanız, başlangıç gecikmesini önlemek için ilk ekran görüntülenene kadar ertelemelidir. EmojiCompatInitializer bu uygulamayı takip eder ve emoji yazı tipinin yüklenmesini ilk ekran devam ettikten sonraya 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 simgesinin, bulduğu tüm emojileri EmojiSpan örnekleriyle değiştirip değiştirmeyeceğini belirler. EmojiCompat, sistemin bir emojiyi oluşturabileceğini tahmin ettiğinde varsayılan olarak bu emojiyi değiştirmez. true olarak ayarlandığında, EmojiCompat tüm emojileri EmojiSpan nesneleriyle değiştirir.
  • setEmojiSpanIndicatorEnabled(): EmojiCompat öğesinin, emojiyi EmojiSpan nesnesiyle değiştirip değiştirmediğini gösterir. 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 olduğunu gösterecek şekilde ayarlar. Varsayılan değer GREEN'dir.
  • registerInitCallback(): Bir uygulamayı EmojiCompat başlatma durumu hakkında bilgilendirir.

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

EmojiCompat ve EmojiCompat.Config sınıfları, başlatma geri çağırmalarını kaydetmek ve kaydını silmek için registerInitCallback() ve unregisterInitCallback() yöntemlerini sağlar. Uygulamanız, arka planda çalışan bir iş parçacığında veya özel bir görünümde emoji'leri işlemeden önce EmojiCompat başlatılana kadar 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. 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 paketlenmiş yazı tiplerini destekleme

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

emoji2-bundled yapay öğesini 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. Paketlenmiş yapılandırmayı kullanmak için emoji2 yapılandırın:

    Kotlin

    EmojiCompat.init(BundledEmojiCompatConfig(context))

    Java

    EmojiCompat.init(new BundledEmojiCompatConfig(context));
  3. emojicompat ile veya AppCompat olmadan ekleme için ö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 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 plandaki bir iş parçacığında yazı tipi yüklemeden kaynaklanan olası bir gecikme olmadan görüntülemesine olanak tanır.

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

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

EmojiCompat başlatma işlemini, EmojiCompatInitializer devre dışı bıraksanız bile erteleyin. Manuel olarak yapılandırırsanız EmojiCompat, ilk ekran yüklemesiyle arka planda çakışmayı önlemek için uygulamanızın ilk ekranı görüntülendikten sonra EmojiCompat.load() işlevini çağırın.

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