EmojiCompat
destek kitaplığı, Android cihazların en yeni emojilerle güncel kalmasını amaçlar. Uygulamanızın, eksik emoji karakterlerini ☐ şeklinde göstermesini önler. Bu, cihazınızda metni gösterecek bir yazı tipinin olmadığını gösterir. EmojiCompat
destek kitaplığını kullanarak, uygulama kullanıcılarınızın en yeni emojileri almak için Android OS güncellemelerini beklemesi gerekmez.
Aşağıdaki ilgili kaynaklara göz atın:
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 sağlar. EmojiCompat
'ü paketlenmiş 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 nihayet emoji gliflerini oluşturur. Şekil 2'de bu süreç gösterilmektedir.
İndirilebilir yazı tipleri yapılandırması
İndirilebilir yazı tipleri yapılandırması, emoji yazı tipini indirmek için İndirilebilir Yazı Tipleri destek kitaplığı özelliğini kullanır. Ayrıca, EmojiCompat
destek kitaplığının Unicode spesifikasyonunun en son sürümlerini takip edebilmesi için gereken emoji meta verilerini de günceller.
Destek kitaplığı bağımlılığı ekleme
EmojiCompat
destek kitaplığını kullanmak için uygulama projenizin sınıf yolu bağımlılıkları üzerinde geliştirme ortamınızda değişiklik yapmanız 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.
Groovy
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
İndirilebilir yazı tipi yapılandırmasını başlatma
Meta verileri ve yazı tipini yüklemek için EmojiCompat
öğesini başlatmanız gerekir. Başlatma işlemi biraz zaman alabileceğinden, başlatma işlemi arka plan iş parçacığında çalışır.
EmojiCompat
'ü 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 yazı tipi sağlayıcı yetkilisini, yazı tipi sağlayıcı paketini, yazı tipi sorgusunu ve sertifika için karma oluşturma grubu listesini sağlayın.FontRequest
hakkında daha fazla bilgi için İndirilebilir Yazı Tipleri dokümanlarında İndirilebilir Yazı Tiplerini Programatik Olarak Kullanma bölümüne bakın.FontRequestEmojiCompatConfig
sınıfının bir örneğini oluşturun veContext
ileFontRequest
sınıflarının örneklerini sağlayın.init()
yöntemini çağırarakEmojiCompat
'ü başlatın veFontRequestEmojiCompatConfig
örneğini iletin.EmojiCompat
widget'larını düzen XML'lerinde 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
'ü indirilebilir yazı tipi yapılandırmasıyla nasıl yapılandıracağınız hakkında daha fazla bilgi edinmek için Emoji Uyumluluğu örnek uygulamasına Java
| Kotlin gidin.
Kitaplık bileşenleri
- Widget'lar:
EmojiEditText
,EmojiTextView
,EmojiButton
TextView
,EditText
veButton
ile birlikteEmojiCompat
kullanılacak varsayılan widget uygulamaları.EmojiCompat
- Destek kitaplığının herkese açık ana yüzeyi. 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
- Karakteri (dizeleri) değiştiren ve karakteri gösteren bir
ReplacementSpan
alt sınıfı. EmojiCompat
Yazı tipiEmojiCompat
, emojileri göstermek için bir yazı tipi kullanır. Bu yazı tipi, Android Emoji yazı tipinin değiştirilmiş bir sürümüdür. Yazı tipi aşağıdaki şekilde değiştirilir:- Emoji oluşturmak için geriye dönük uyumluluk sağlamak amacıyla tüm emoji karakterleri, U+F0001 ile başlayan Unicode'un Ek Özel Kullanım Alanı-A'da tek bir Unicode kod noktasıyla temsil edilir.
-
Ek emoji meta verileri, yazı tipine ikili biçimde eklenir ve
EmojiCompat
tarafından çalışma zamanında ayrıştırılır. Veriler, Emoji özel etiketiyle birlikte yazı tipininmeta
tablosuna 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ıftaki aşağıdaki yöntemleri kullanabilirsiniz:
setReplaceAll()
:EmojiCompat
'un bulduğu tüm emojileriEmojiSpans
ile değiştirip değiştirmeyeceğini belirler. Varsayılan olarakEmojiCompat
, sistemin bir emojiyi oluşturup oluşturamayacağını anlamak için elinden geleni yapar ve bu emojileri değiştirmez.true
olarak ayarlandığında,EmojiCompat
bulduğu tüm emojileriEmojiSpans
ile değiştirir.setEmojiSpanIndicatorEnabled()
:EmojiCompat
'un bir emojiyiEmojiSpan
ile değiştirip değiştirmediğini belirtir.true
olarak ayarlandığındaEmojiCompat
,EmojiSpan
için bir arka plan çizer. Bu yöntem genellikle hata ayıklama amacıyla kullanılır.setEmojiSpanIndicatorColor()
: RengiEmojiSpan
olarak gösterecek şekilde ayarlar. Varsayılan değer:GREEN
.registerInitCallback
: Uygulamayı,EmojiCompat
ilkleştirme 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() {...})
İlk kullanıma hazırlama işleyicileri ekleme
EmojiCompat
ve
EmojiCompat
sınıfları, bir ilk başlatma geri çağırma işlevi kaydetme
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ığının ilk kullanıma hazırlanması 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.
İstediğiniz zaman başlatma durumunu kontrol etmek için getLoadState()
yöntemini çağırın. Aşağıdaki değerlerden birini döndürür:
LOAD_STATE_LOADING
,
LOAD_STATE_SUCCEEDED
veya
LOAD_STATE_FAILED
.
EmojiCompat'i AppCompat widget'larıyla kullanma
AppCompat widgets
kullanıyorsanız AppCompat widgets
'den gelen EmojiCompat
widget'larını kullanabilirsiniz.
- Destek kitaplığını bağımlılıklar bölümüne ekleyin.
Groovy
dependencies { ... implementation "androidx.emoji:emoji-bundled:$version" }
Kotlin
dependencies { implementation("androidx.emoji:emoji-appcompat:$version") }
Groovy
dependencies { implementation "androidx.emoji:emoji-appcompat:$version" }
EmojiCompat
AppCompat Widget
widget'larını yerleşim XML'lerinde 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"/>
Paketlenmiş yazı tipi yapılandırması
EmojiCompat
destek kitaplığı, paketlenmiş yazı tipi sürümünde de mevcuttur. Bu paket, yerleştirilmiş meta verileri içeren yazı tipini içerir. Pakette, meta verileri ve yazı tiplerini yüklemek için AssetManager
kullanan bir BundledEmojiCompatConfig
de bulunur.
Not: Yazı tipi boyutu megabayt cinsindendir.
Destek kitaplığı bağımlılığı ekleme
EmojiCompat
destek kitaplığını paketlenmiş yazı tipi yapılandırmasıyla kullanmak için uygulama projenizin geliştirme ortamınızdaki 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.
Groovy
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
Kotlin
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
EmojiCompat'i yapılandırmak için paketlenmiş yazı tiplerini kullanma
EmojiCompat
'ü yapılandırmak için paketlenmiş yazı tiplerini kullanmak isterseniz aşağıdaki adımları uygulayın:
EmojiCompat
örneği oluşturmak veContext
örneği sağlamak içinBundledEmojiCompatConfig
'ü kullanın.EmojiCompat
sınıfını başlatmak veBundledEmojiCompatConfig
sınıfının örneğini iletmek içininit()
sınıfının 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'i widget'lar olmadan kullanma
EmojiCompat
, doğru resimleri oluşturmak için
EmojiSpan
kullanır.
Bu nedenle, belirli bir CharSequence
değerini EmojiSpans
ile Spanned
örneklerine dönüştürmesi gerekir. EmojiCompat
sınıfı, EmojiSpans
ile CharSequences
öğelerini Spanned
örneklerine dönüştürmek için bir yöntem sağlar. Bu yöntemi kullanarak, işlenmemiş dize yerine işlenen örnekleri işleyebilir ve ö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");
IME'ler için EmojiCompat'i kullanma
Klavyeler, EmojiCompat
destek kitaplığını kullanarak etkileşimde bulundukları uygulama tarafından desteklenen emojileri oluşturabilir. IME'ler, EmojiCompat
'un emoji oluşturma yeteneği olup olmadığını kontrol etmek için hasEmojiGlyph()
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, palette hangi emojinin oluşturulacağını belirlemek için EmojiCompat
destek kitaplığının uygulama tarafından desteklenen sürümünü de kontrol edebilir. Klavyenin, sürümünü kontrol etmek için (varsa) EditorInfo.extras
paketinde aşağıdaki anahtarların bulunup bulunmadığını kontrol etmesi gerekir:
EDITOR_INFO_METAVERSION_KEY
EDITOR_INFO_REPLACE_ALL_KEY
Anahtar pakette mevcutsa değer, uygulamanın kullandığı emoji meta verilerinin sürümünü temsil eder. Bu anahtar yoksa uygulama EmojiCompat
kullanmıyor demektir.
Anahtar varsa ve true
değerine ayarlanmışsa bu, 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.
Klavye, EditorInfo.extras
paketindeki anahtarları aldıktan sonra, uygulamanın belirli bir emojiyi oluşturup oluşturamayacağını kontrol etmek için hasEmojiGlyph()
yöntemini kullanabilir. Bu yöntemde metadataVersion
, EDITOR_INFO_METAVERSION_KEY
değerini temsil eder.
EmojiCompat'i özel widget'larla kullanma
Uygulamanızdaki CharSequence
öğesini ön işleme almak ve Spanned
örneklerini oluşturabilen herhangi bir widget'a (ör. TextView
) eklemek için dilediğiniz zaman process()
yöntemini kullanabilirsiniz. Ayrıca, EmojiCompat
, özel widget'larınızı en az çabayla emoji desteğiyle zenginleştirmenize olanak tanıyan aşağıdaki widget yardımcı sınıflarını sağlar.
- Örnek TextView
- Örnek EditText
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şlatırım?
- İlk kullanıma hazırlama işlemi ne kadar sürer?
- EmojiCompat destek kitaplığı ne kadar bellek kullanır?
- Özel TextView için EmojiCompat'i kullanabilir miyim?
- Android 4.4 (API düzeyi 19) veya daha eski sürümleri çalıştıran cihazlarda düzen XML'lerine widget eklersem ne olur?
Emoji yazı tipleri, cihazda yoksa ilk istek üzerine indirilir. İndirme planlaması uygulama için şeffaftır.
Yazı tipi indirildikten sonra EmojiCompat
'ün 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üklenir ve yaklaşık 200 KB kullanır.
Evet. EmojiCompat, özel widget'lar için yardımcı sınıflar sağlar. Belirli bir dizeyi önceden işlemek ve Spanned
olarak dönüştürmek de mümkündür. Widget yardımcı sınıfları hakkında daha fazla bilgi için EmojiCompat'i özel widget'larla kullanma bölümüne bakın.
EmojiCompat
destek kitaplığını veya widget'larını, Android 4.4 (API düzeyi 19) veya daha eski sürümleri çalıştıran cihazları destekleyen uygulamalarınıza dahil edebilirsiniz. Ancak bir cihaz API düzeyi 19'dan önceki bir Android sürümünü çalıştırıyorsa
EmojiCompat
ve widget'ları "işlem yok" durumundaysa Bu, EmojiTextView
'ün tam olarak normal bir TextView
gibi davrandığı anlamına gelir.
EmojiCompat
örneği; init()
yöntemini çağırdığınızda hemen LOAD_STATE_SUCCEEDED
durumuna geçer.
Ek kaynaklar
Kitaplığı kullanma hakkında daha fazla bilgi edinmek için EmojiCompat
EmojiCompat videosunu izleyin.