EmojiCompat
destek kitaplığı, Android cihazları
en yeni emojilerle güncel tutmayı amaçlar. Uygulamanızın eksik emoji karakterlerini ☐ biçiminde göstermesini engeller. Bu durum, cihazınızda metni görüntüleyecek bir yazı tipi olmadığını belirtir. EmojiCompat
destek kitaplığını kullanarak uygulama kullanıcılarınızın en yeni emojileri edinmek için Android OS güncellemelerini beklemesine gerek kalmaz.
Aşağıdaki ilgili kaynaklara bakı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 uygulayabileceğiniz 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 emojileri tanımlar, gerekirse EmojiSpans
ile değiştirir ve son olarak emoji gliflerini oluşturur. Şekil 2'de işlem gösterilmiştir.
İndirilebilir yazı tipleri yapılandırması
İndirilebilir yazı tipleri yapılandırması, emoji yazı tipi 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ümlerine uyum sağlamak için ihtiyaç duyduğu 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. dependencies
bölümüne destek kitaplığını ekleyin.
Eski
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ı karakterini yüklemek için EmojiCompat
öğesini ilk kullanıma hazırlamanız gerekir. Başlatma işlemi biraz zaman alabildiğinden, başlatma işlemi bir arka plan iş parçacığı üzerinde çalışı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 yazı tipi sağlayıcı yetkilisini, yazı tipi sağlayıcı paketini, yazı tipi sorgusunu ve sertifika için 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
örneklerini sağlayın.init()
yöntemini çağırıpFontRequestEmojiCompatConfig
örneğini ileterekEmojiCompat
özelliğini başlatın.- 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
EmojiCompat
öğesiniTextView
,EditText
veButton
ile kullanmak için varsayılan widget uygulamaları.EmojiCompat
- Destek kitaplığı için ana herkese açık yüzey. Tüm harici çağrıları ve koordinatları sistemin diğer bölümleriyle birlikte gerçekleştirir.
EmojiCompat.Config
- Oluşturulacak singleton örneğini yapılandırır.
EmojiSpan
- Karakterin (diziler) yerini alıp glifi oluşturan bir
ReplacementSpan
alt sınıfı. EmojiCompat
Yazı TipiEmojiCompat
, emojileri görüntülemek için bir yazı tipi kullanıyor. Bu yazı tipi, Android Emoji yazı tipinin değiştirilmiş bir sürümüdür. Yazı tipi aşağıdaki gibi değiştirilir:- Emoji oluşturmak için geriye dönük uyumluluk sağlamak amacıyla, tüm emoji karakterleri Unicode'un Ek Özel Kullanım Alanı-A'sında U+F0001 ile başlayan tek bir Unicode kod noktasıyla gösterilir.
-
Ekstra emoji meta verileri, yazı tipine ikili program biçiminde eklenir ve çalışma zamanında
EmojiCompat
tarafından ayrıştırılır. Veriler, yazı tipininmeta
tablosuna Emji gizli 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
öğesinin, bulduğu tüm emojileriEmojiSpans
ile değiştirip değiştirmeyeceğini belirler.EmojiCompat
, varsayılan olarak sistemin emoji oluşturup oluşturamayacağını anlamaya çalışır ve bu emojileri değiştirmez.true
olarak ayarlandığındaEmojiCompat
, bulduğu tüm emojileriEmojiSpans
ile değiştirir.setEmojiSpanIndicatorEnabled()
:EmojiCompat
öğesinin 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()
: Rengi birEmojiSpan
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() {...})
İlk kullanıma hazırlama 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ığının başlatılması 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.
Herhangi bir anda 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
tarihinden itibaren genişletilmiş EmojiCompat
widget'ları kullanabilirsiniz.
- Bağımlılıklar bölümüne destek kitaplığını ekleyin.
Eski
dependencies { ... implementation "androidx.emoji:emoji-bundled:$version" }
Kotlin
dependencies { implementation("androidx.emoji:emoji-appcompat:$version") }
Eski
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ı tiplerini yapılandırma
EmojiCompat
destek kitaplığı, yazı tipiyle birlikte paket halinde de mevcuttur. Bu paket, yerleştirilmiş meta verilerin bulunduğu yazı tipini içerir. Paket, meta verileri ve yazı tiplerini yüklemek için AssetManager
kullanan bir BundledEmojiCompatConfig
de içerir.
Not: Yazı tipi boyutu birden fazla megabayttır.
Destek kitaplığı bağımlılığı ekleme
EmojiCompat
destek kitaplığını gruplandırılmış yazı tipi yapılandırmasıyla 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. dependencies
bölümüne destek kitaplığını ekleyin.
Eski
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
eklentisini yapılandırmak için gruplandırılmış yazı tiplerini kullanmak için aşağıdaki adımları uygulayın:
EmojiCompat
örneği oluşturmak veContext
örneğini sağlamak içinBundledEmojiCompatConfig
kullanın.EmojiCompat
öğesini başlatmak içininit()
yöntemini çağırın veBundledEmojiCompatConfig
örneğini iletin.
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
özelliğini kullanır.
Bu nedenle, belirli bir CharSequence
öğesini EmojiSpans
ile Spanned
örneklerine dönüştürmesi gerekir. EmojiCompat
sınıfı, CharSequences
öğesini EmojiSpans
ile Spanned
örneklerine dönüştürmek için bir yöntem sağlar. Bu yöntemi kullanarak, ham dize yerine işlenen örnekleri işleyip önbelleğe alabilirsiniz. Bu, 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'ı kullanma
Klavyeler, EmojiCompat
destek kitaplığını kullanarak etkileşimde bulundukları uygulama tarafından desteklenen emojileri oluşturabilir. IME'ler, EmojiCompat
öğesinin emoji oluşturup oluşturamadığı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.
Palette hangi emojinin oluşturulacağını belirlemek için klavye, uygulamanın desteklediği EmojiCompat
destek kitaplığı sürümünü de kontrol edebilir. Varsa klavyenin, sürümü kontrol etmek için EditorInfo.extras
paketinde aşağıdaki tuşların olup olmadığını kontrol etmesi gerekir:
EDITOR_INFO_METAVERSION_KEY
EDITOR_INFO_REPLACE_ALL_KEY
Anahtar pakette yer alıyorsa değer, uygulamanın kullandığı emoji meta verilerinin sürümünü temsil eder. Bu anahtar yoksa uygulama EmojiCompat
kullanmıyordur.
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 önceden işlemek ve Spanned
örneklerini oluşturabilen herhangi bir widget'a (ör. TextView
) eklemek için her zaman process()
yöntemini kullanabilirsiniz. Ayrıca EmojiCompat
, özel widget'larınızı emoji desteğiyle minimum çabayla zenginleştirmenizi sağlamak için aşağıdaki widget yardımcı sınıflarını da sunar.
- Ö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şlatabilirim?
- İlk kullanıma hazırlama ne kadar sürer?
- EmojiCompat destek kitaplığı ne kadar bellek kullanıyor?
- EmojiCompat'ı özel bir TextView için kullanabilir miyim?
- Android 4.4 (API düzeyi 19) veya önceki sürümleri çalıştıran cihazlarda düzen XML'lerine widget eklersem ne olur?
Cihazda yoksa emoji yazı tipleri ilk istek üzerine indirilir. İndirme planlaması uygulama için şeffaftır.
Yazı tipi indirildikten sonra EmojiCompat
ürününün ilk kullanıma hazırlanması 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 sağlar. Belirli bir dizeyi önceden işleyip 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. Ancak cihaz, API düzeyi 19'dan önceki bir Android sürümünü kullanıyorsa EmojiCompat
ve widget'ları "çalışmıyor" durumunda olur. Yani EmojiTextView
, tıpkı normal bir TextView
gibi davranır.
EmojiCompat
örneği; init()
yöntemini çağırdığınızda anında LOAD_STATE_SUCCEEDED
durumuna geçer.
Ek kaynaklar
EmojiCompat
kitaplığını kullanma hakkında ek bilgi için EmojiCompat videosunu izleyin.