EmojiCompat
destek kitaplığı, Android cihazları en son emojilerle güncel tutmayı amaçlar. Uygulamanızın, eksik emoji karakterlerini ☐ biçiminde göstermesini engeller. Bu, cihazınızda metni gösterecek bir yazı tipi olmadığını gösterir. EmojiCompat
destek kitaplığı sayesinde uygulama kullanıcılarınızın, en son emojileri almak için Android OS güncellemelerini beklemesi gerekmez.
Aşağıdaki ilgili kaynakları inceleyin:
EmojiCompat nasıl çalışır?
EmojiCompat
destek kitaplığı, Android 4.4 (API düzeyi 19) ve sonraki sürümleri çalıştıran cihazlarda geriye dönük uyumlu emoji desteğini uygulamak için sınıflar sunar. EmojiCompat
öğesini paket halinde sunulan veya indirilebilir yazı tipleriyle yapılandırabilirsiniz. Yapılandırma hakkında daha fazla bilgi için aşağıdaki bölümlere bakın:
EmojiCompat
belirli bir CharSequence
için emojiyi tanımlar, gerekirse EmojiSpans
ile değiştirir ve son olarak emoji gliflerini oluşturur. Şekil 2'de süreç gösterilmiştir.
İndirilebilir yazı tipleri yapılandırması
İndirilebilir yazı tipleri yapılandırması, bir emoji yazı tipi indirmek için İndirilebilir Yazı Tipleri desteği kitaplığı özelliğini kullanır. Ayrıca EmojiCompat
destek kitaplığının, Unicode spesifikasyonunun en yeni sürümlerini desteklemesi için gereken emoji meta verilerini de günceller.
Destek kitaplığı bağımlılığı ekleme
EmojiCompat
destek kitaplığını kullanmak için geliştirme ortamınızda uygulama projenizin sınıf yolu bağımlılıklarını değiştirmeniz gerekir.
Uygulama projenize destek kitaplığı eklemek için:
- Uygulamanızın
build.gradle
dosyasını açın. - Destek kitaplığını
dependencies
bölümüne ekleyin.
Modern
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
İndirilebilir yazı tipi yapılandırması başlatılıyor
Meta veriyi ve yazı biçimini yüklemek için EmojiCompat
öğesini başlatmanız gerekir. Başlatma biraz zaman alabileceğinden, başlatma işlemi bir arka plan iş parçacığı üzerinde çalıştırılır.
EmojiCompat
öğesini indirilebilir yazı tipi yapılandırmasıyla başlatmak için aşağıdaki adımları uygulayın:
FontRequest
sınıfının bir örneğini oluşturun ve sertifika için yazı tipi sağlayıcı yetkisini, yazı tipi sağlayıcı paketini, yazı tipi sorgusunu ve karma gruplarının listesini sağlayın.FontRequest
hakkında daha fazla bilgi için İndirilebilir Yazı Tipleri dokümanlarındaki İndirilebilir Yazı Tiplerini programatik olarak kullanma bölümüne bakın.FontRequestEmojiCompatConfig
örneği oluşturupContext
veFontRequest
örnekleri sağlayın.init()
yöntemini çağırarakEmojiCompat
uygulamasını başlatın veFontRequestEmojiCompatConfig
örneğini iletin.- Düzen XML'lerinde
EmojiCompat
widget'larını kullanın.AppCompat
kullanıyorsanız EmojiCompat widget'larını AppCompat ile kullanma bölümüne bakın.
Kotlin
class MyApplication : Application() { override fun onCreate() { super.onCreate() val fontRequest = FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES ) val config = FontRequestEmojiCompatConfig(this, fontRequest) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); FontRequest fontRequest = new FontRequest( "com.example.fontprovider", "com.example", "emoji compat Font Query", CERTIFICATES); EmojiCompat.Config config = new FontRequestEmojiCompatConfig(this, fontRequest); EmojiCompat.init(config); } }
<android.support.text.emoji.widget.EmojiTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
EmojiCompat
öğesini indirilebilir yazı tipi yapılandırmasıyla yapılandırma hakkında daha fazla bilgi edinmek için Emoji Uyumluluğu örnek uygulaması Java
| Kotlin bölümüne gidin.
Kitaplık bileşenleri
- Widget'lar:
EmojiEditText
,EmojiTextView
,EmojiButton
TextView
,EditText
veButton
ile birlikteEmojiCompat
öğesinin kullanılması için varsayılan widget uygulamaları.EmojiCompat
- Destek kitaplığının herkese açık ana platformu. Tüm harici aramaları gerçekleştirir ve sistemin diğer bölümleriyle koordinasyon sağlar.
EmojiCompat.Config
- Oluşturulacak tekil örneği yapılandırır.
EmojiSpan
- Karakterin (diziler) yerini alan ve glifi oluşturan bir
ReplacementSpan
alt sınıfı. EmojiCompat
Yazı TipiEmojiCompat
, emojileri göstermek için yazı tipi kullanıyor. Bu yazı tipi, Android Emoji yazı tipinin değiştirilmiş bir sürümüdür. Yazı tipi şu şekilde değiştirilir:- Emoji oluşturmak için geriye dönük uyumluluk sağlamak amacıyla, tüm emoji karakterleri, Unicode'un U+F0001 ile başlayan Ek Özel Kullanım Alanı'nda tek bir Unicode kod noktasıyla temsil edilir.
-
Ekstra emoji meta verileri, yazı tipine ikili biçimde eklenir ve çalışma zamanında
EmojiCompat
tarafından ayrıştırılır. Veriler, yazı tipininmeta
tablosuna Emji özel etiketiyle yerleştirilir.
Yapılandırma seçenekleri
EmojiCompat
davranışını değiştirmek için EmojiCompat
örneğini kullanabilirsiniz. Yapılandırmayı ayarlamak için temel sınıfta yer alan aşağıdaki yöntemleri kullanabilirsiniz:
setReplaceAll()
:EmojiCompat
tarafından bulunan tüm emojileriEmojiSpans
ile değiştirip değiştirmeyeceğini belirler. Varsayılan olarakEmojiCompat
, sistemin bir emoji oluşturup oluşturamayacağını ve bu emojilerin yerini alıp alamayacağını anlamak için elinden geleni yapar.true
olarak ayarlandığındaEmojiCompat
, bulduğu tüm emojileriEmojiSpans
ile değiştirir.setEmojiSpanIndicatorEnabled()
:EmojiCompat
adlı kullanıcının bir emojiyiEmojiSpan
ile değiştirip değiştirmediğini belirtir.true
olarak ayarlandığındaEmojiCompat
,EmojiSpan
için arka plan çizer. Bu yöntem çoğunlukla hata ayıklama amacıyla kullanılır.setEmojiSpanIndicatorColor()
: RengiEmojiSpan
belirtecek şekilde ayarlar. Varsayılan değerGREEN
değeridir.registerInitCallback
: UygulamayıEmojiCompat
başlatma işleminin durumu hakkında bilgilendirir.
Kotlin
val config = FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(object: EmojiCompat.InitCallback() { ... })
Java
EmojiCompat.Config config = new FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(new InitCallback() {...})
Başlatma işleyicileri ekleme
EmojiCompat
ve EmojiCompat
sınıfları, başlatma geri çağırması kaydetmek için registerInitCallback()
ve unregisterInitCallback()
yöntemleri sağlar. 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. EmojiCompat
destek kitaplığı başarıyla başlatıldığında 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. Şu değerlerden birini döndürür:
LOAD_STATE_LOADING
,
LOAD_STATE_SUCCEEDED
veya
LOAD_STATE_FAILED
.
EmojiCompat'ı AppCompat widget'larıyla kullanma
AppCompat widgets
kullanıyorsanız AppCompat widgets
kapsamındaki EmojiCompat
widget'ları kullanabilirsiniz.
- Destek kitaplığını bağımlılıklar bölümüne ekleyin.
Modern
dependencies { ... implementation "androidx.emoji:emoji-bundled:$version" }
Kotlin
dependencies { implementation("androidx.emoji:emoji-appcompat:$version") }
Modern
dependencies { implementation "androidx.emoji:emoji-appcompat:$version" }
- Düzen XML'lerinde
EmojiCompat
AppCompat Widget
widget'larını kullanın.
<android.support.text.emoji.widget.EmojiAppCompatTextView android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatEditText android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.text.emoji.widget.EmojiAppCompatButton android:layout_width="wrap_content" android:layout_height="wrap_content"/>
Gruplandırılmış yazı tipleri yapılandırması
EmojiCompat
destek kitaplığı, paket halinde sunulan bir yazı tipi sürümüyle de kullanılabilir. Bu paket, yerleşik meta verilere sahip yazı tipini içerir. Paket, meta verileri ve yazı tiplerini yüklemek için AssetManager
öğesini kullanan bir BundledEmojiCompatConfig
de içerir.
Not: Yazı tipi boyutu birden çok megabayt cinsindendir.
Destek kitaplığı bağımlılığı ekleme
Paketlenmiş yazı tipi yapılandırmasıyla EmojiCompat
destek kitaplığını kullanmak için geliştirme ortamınızda uygulama projenizin sınıf yolu bağımlılıklarını değiştirmeniz gerekir.
Uygulama projenize destek kitaplığı eklemek için:
- Uygulamanızın
build.gradle
dosyasını açın. - Destek kitaplığını
dependencies
bölümüne ekleyin.
Modern
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
EmojiCompat'ı yapılandırmak için gruplandırılmış yazı tiplerini kullanma
EmojiCompat
yapılandırmasında paket haline getirilmiş yazı tiplerini kullanmak için aşağıdaki adımları uygulayın:
EmojiCompat
örneği oluşturmak veContext
örneği sağlamak içinBundledEmojiCompatConfig
kullanın.EmojiCompat
uygulamasını başlatmak veBundledEmojiCompatConfig
örneğini iletmek içininit()
yöntemini çağırın.
Kotlin
class MyApplication : Application() { override fun onCreate() { super.onCreate() val config = BundledEmojiCompatConfig(this) EmojiCompat.init(config) } }
Java
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); EmojiCompat.Config config = new BundledEmojiCompatConfig(this); EmojiCompat.init(config); ... } }
EmojiCompat'ı widget'lar olmadan kullanma
EmojiCompat
, doğru resimleri oluşturmak için EmojiSpan
kullanır.
Dolayısıyla, belirli bir CharSequence
öğesini EmojiSpans
ile Spanned
örneğine dönüştürmelidir. EmojiCompat
sınıfı, CharSequences
değerini EmojiSpans
ile Spanned
örneğine dönüştürmek için bir yöntem sunar. Bu yöntemi kullanarak ham dize yerine işlenen örnekleri işleyip önbelleğe alabilirsiniz. Böylece 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");
IME'ler için EmojiCompat'ı Kullanma
Klavyeler, EmojiCompat
destek kitaplığını kullanarak etkileşimde bulundukları uygulamanın desteklediği emojileri oluşturabilir. IME'ler, EmojiCompat
uygulamasının emoji oluşturup oluşturamayacağını kontrol etmek için hasEmojiGlyph()
yöntemini kullanabilir. Bu yöntem, bir emojinin CharSequence
kadarını alır ve EmojiCompat
emojiyi algılayıp oluşturabiliyorsa true
değerini döndürür.
Klavye, tarayıcıda hangi emojilerin oluşturulacağını belirlemek için uygulamanın desteklediği EmojiCompat
destek kitaplığının sürümünü de kontrol edebilir. Sürümü kontrol etmek için varsa klavyenin aşağıdaki tuşların EditorInfo.extras
paketinde yer alıp almadığını kontrol etmesi gerekir:
EDITOR_INFO_METAVERSION_KEY
EDITOR_INFO_REPLACE_ALL_KEY
Anahtar pakette bulunuyorsa bu değer, uygulamanın kullandığı emoji meta verisi sürümünü temsil eder. Bu anahtar mevcut değilse uygulama EmojiCompat
kullanmıyor demektir.
Anahtarın mevcut olması ve true
değerine ayarlanması, uygulamanın SetReplaceAll()
yöntemini çağırdığını gösterir. EmojiCompat
yapılandırması hakkında daha fazla bilgi için Yapılandırma seçenekleri bölümüne bakın.
EditorInfo.extras
paketindeki tuşları aldıktan sonra klavye, uygulamanın belirli bir emoji oluşturup oluşturamayacağını kontrol etmek için hasEmojiGlyph()
yöntemini kullanabilir. Burada metadataVersion
, EDITOR_INFO_METAVERSION_KEY
değeridir.
EmojiCompat'ı özel widget'larla kullanma
Uygulamanızda CharSequence
öğesini ön işleme almak ve Spanned
örneklerini oluşturabilen herhangi bir widget'a (örneğin, TextView
) eklemek için her zaman process()
yöntemini kullanabilirsiniz. Ayrıca EmojiCompat
, minimum çabayla emoji desteğiyle özel widget'larınızı zenginleştirmenizi sağlamak için aşağıdaki widget yardımcı sınıflarını sunar.
- Örnek Metin Görünümü
- Örnek Düzenleme Metni
Kotlin
class MyTextView(context: Context) : AppCompatTextView(context) { private val emojiTextViewHelper: EmojiTextViewHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiTextViewHelper(this).apply { updateTransformationMethod() } } override fun setFilters(filters: Array<InputFilter>) { super.setFilters(emojiTextViewHelper.getFilters(filters)) } override fun setAllCaps(allCaps: Boolean) { super.setAllCaps(allCaps) emojiTextViewHelper.setAllCaps(allCaps) } }
Java
public class MyTextView extends AppCompatTextView { ... public MyTextView(Context context) { super(context); init(); } ... private void init() { getEmojiTextViewHelper().updateTransformationMethod(); } @Override public void setFilters(InputFilter[] filters) { super.setFilters(getEmojiTextViewHelper().getFilters(filters)); } @Override public void setAllCaps(boolean allCaps) { super.setAllCaps(allCaps); getEmojiTextViewHelper().setAllCaps(allCaps); } private EmojiTextViewHelper getEmojiTextViewHelper() { ... } }
Kotlin
class MyEditText(context: Context) : AppCompatEditText(context) { private val emojiEditTextHelper: EmojiEditTextHelper by lazy(LazyThreadSafetyMode.NONE) { EmojiEditTextHelper(this).also { super.setKeyListener(it.getKeyListener(keyListener)) } } override fun setKeyListener(input: KeyListener?) { input?.also { super.setKeyListener(emojiEditTextHelper.getKeyListener(it)) } } override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection { val inputConnection: InputConnection = super.onCreateInputConnection(outAttrs) return emojiEditTextHelper.onCreateInputConnection( inputConnection, outAttrs ) as InputConnection } }
Java
public class MyEditText extends AppCompatEditText { ... public MyEditText(Context context) { super(context); init(); } ... private void init() { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(getKeyListener())); } @Override public void setKeyListener(android.text.method.KeyListener keyListener) { super.setKeyListener(getEmojiEditTextHelper().getKeyListener(keyListener)); } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { InputConnection inputConnection = super.onCreateInputConnection(outAttrs); return getEmojiEditTextHelper().onCreateInputConnection(inputConnection, outAttrs); } private EmojiEditTextHelper getEmojiEditTextHelper() { ... } }
Sık sorulan sorular
- Yazı tipi indirme işlemini nasıl başlatabilirim?
- İlk kullanıma hazırlama ne kadar sürüyor?
- EmojiCompat destek kitaplığı ne kadar bellek kullanır?
- EmojiCompat'i özel bir TextView için kullanabilir miyim?
- Android 4.4 (API düzeyi 19) veya önceki sürümleri üzerinde çalışan cihazlarda düzen XML'lerine widget eklersem ne olur?
Cihazda bulunmayan emoji yazı tipleri ilk istek üzerine indirilir. İndirme planlaması uygulama açısından şeffaftır.
Yazı tipi indirildikten sonra EmojiCompat
öğesinin başlatılması yaklaşık 150 milisaniye sürer.
Şu anda, emojiyi bulmak için kullanılan veri yapısı uygulamanın belleğine yüklenmiştir ve yaklaşık 200 KB kullanır.
Evet. EmojiCompat, özel widget'lar için yardımcı sınıflar sunar. Belirli bir dizeyi ön işlemden geçirerek Spanned
biçimine dönüştürmek de mümkündür. Widget yardımcı sınıfları hakkında daha fazla bilgi için EmojiCompat'ı özel widget'larla kullanma bölümüne bakın.
Android 4.4 (API düzeyi 19) veya önceki sürümleri çalıştıran cihazları destekleyen uygulamalarınıza EmojiCompat
destek kitaplığını veya widget'larını ekleyebilirsiniz. Bununla birlikte, bir cihaz API düzeyi 19'dan önceki bir Android sürümünde çalışıyorsa EmojiCompat
ve widget'ları "işlem yok" durumunda olur. Bu, EmojiTextView
öğesinin tam olarak normal bir TextView
gibi davrandığı anlamına gelir.
EmojiCompat
örneğini çağırın; init()
yöntemini çağırdığınızda hemen LOAD_STATE_SUCCEEDED
durumuna geçer.
Ek kaynaklar
EmojiCompat
kitaplığını kullanma hakkında daha fazla bilgi için EmojiCompat videosunu izleyin.