Emoji Uyumluluğu

EmojiCompat destek kitaplığının amacı: en yeni emojilerle Android cihazları güncel tutun. Uygulamanızın, eksik emoji karakterlerinin ☐ şeklinde gösterilmesini engelleyebilir. cihazınızda metni görüntüleyecek bir yazı tipi olmadığını belirtir. Ölçüt EmojiCompat destek kitaplığını kullanarak Uygulama kullanıcılarınızın en son güncellemeleri almak için Android OS güncellemelerini beklemesine gerek yoktur emoji'ye dokunun.

Emoji gösteren cihazlar
Şekil 1. Emoji karşılaştırması
'nı inceleyin.

Aşağıdaki ilgili kaynaklara bakın:

EmojiCompat nasıl çalışır?

EmojiCompat destek kitaplığı şunları sağlar: çalışan cihazlarda geriye dönük uyumlu emoji desteği uygulamak için sınıflar Android 4.4 (API düzeyi 19) ve sonraki sürümler. Chrome Web Mağazası'ndaki EmojiCompat ya gruplanmış ya da indirilebilir yazı tipleri. Yapılandırma hakkında daha fazla bilgi için şu bölümlerden faydalanabilirsiniz:

EmojiCompat belirli bir için emojiyi tanımlar CharSequence, bunları şununla değiştirir: gerekirse EmojiSpans ve son olarak emoji glifleri oluşturur. Şekil 2'de işlem gösterilmiştir.

EmojiCompat işlemi
Şekil 2. EmojiCompat işlemi
'nı inceleyin.

İndirilebilir yazı tipleri yapılandırması

İndirilebilir yazı tipleri yapılandırması, İndirilebilir Yazı Tipleri desteğini kullanır. emoji yazı tipi indirmenizi sağlayan kitaplık özelliği. Aynı zamanda, EmojiCompat tarafından kullanılan emoji meta verileri destek kitaplığının, Unicode'un en son sürümlerini takip etmesi gerekir bakın.

Destek kitaplığı bağımlılığı ekleme

EmojiCompat destek kitaplığını kullanmak için: uygulama projenizin sınıf yolu bağımlılıklarını ortamına taşıyabilirsiniz.

Uygulama projenize destek kitaplığı eklemek için:

  1. Uygulamanızın build.gradle dosyasını açın.
  2. 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ı tipini başlatma yapılandırma

Şu işlemler için EmojiCompat uygulamasını ilk kullanıma hazırlamanız gerekir: meta verileri ve yazı tipini yüklemektir. Başlatma işlemi biraz zaman alabileceğinden ilk kullanıma hazırlama işlemi, arka plan iş parçacığı üzerinde çalışır.

EmojiCompat özelliğini yazı tipi yapılandırması için aşağıdaki adımları uygulayın:

  1. FontRequest öğesinin bir örneğini oluşturun yazı tipi sağlayıcı yetkilisini, yazı tipi sağlayıcı paketini, yazı tipi sorgusunu ve sertifika için karma kümelerinin listesini içerir. Daha fazla FontRequest hakkında bilgiler, şuraya bakın: değerini İndirilebilir Yazı Tiplerini programatik olarak kullanma İndirilebilir Yazı Tipleri'ndeki belgelerinden faydalanabilirsiniz.
  2. Şunun bir örneğini oluştur: FontRequestEmojiCompatConfig. ve Context ve örnek durumlarda FontRequest.
  3. Şu kodu çağırarak EmojiCompat'ı başlatın: init() yöntemini kullanın ve FontRequestEmojiCompatConfig.
  4. 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);
       }
    }
    
  5. Düzende EmojiCompat widget'larını kullanın XML'ler. AppCompat kullanıyorsanız bu sayfaya EmojiCompat widget'larını AppCompat ile kullanma bölümüne ekleyin.
  6. <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"/>
    

Nasıl yapılandıracağınız hakkında daha fazla bilgi için İndirilebilir yazı tipiyle EmojiCompat yapılandırma, Emoji Uyumluluğu örnek uygulamasına gidin Java | Kotlin.

Kitaplık bileşenleri

EmojiCompat işlemindeki kitaplık bileşenleri
Şekil 3. EmojiCompat işlemindeki kitaplık bileşenleri
'nı inceleyin.
Widget'lar: EmojiEditText, EmojiTextView, EmojiButton
Kullanılacak varsayılan widget uygulamaları Şununla EmojiCompat: TextView, EditText ve Button.
EmojiCompat
Destek kitaplığı için ana herkese açık yüzey. Tüm işlevleri yerine getirir dış aramaları ve koordinatları sistemin diğer parçalarıyla koordine etmenizi sağlar.
EmojiCompat.Config
Oluşturulacak singleton örneğini yapılandırır.
EmojiSpan
ReplacementSpan karakterini (diziler) içerir ve glifi oluşturur.
EmojiCompat Yazı Tipi
EmojiCompat, görüntülemek için bir yazı tipi kullanıyor emoji'ye dokunun. Bu yazı tipi, Android emoji yazı tipi. 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'ler karakterler tek bir Unicode kod noktasıyla temsil edilir. Unicode'un U+F0001 ile başlayan Ek Özel Kullanım Alanı-A
  • Ekstra emoji meta verileri, yazı tipine ikili biçimde eklenir ve şuna göre ayrıştırılır: EmojiCompat Veriler yerleştirilmiş yazı tipinin meta tablosunda Emji.

Yapılandırma seçenekleri

EmojiCompat örneğini kullanarak şunları yapabilirsiniz: EmojiCompat davranışını değiştirin. Tekliflerinizi otomatikleştirmek ve optimize etmek için Yapılandırmayı ayarlamak için temel sınıfta yer alan aşağıdaki yöntemleri kullanın:

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ıf sağlamak registerInitCallback() ve unregisterInitCallback() ilk kullanıma hazırlama geri çağırması kullanma yöntemleri vardır. Bu yöntemleri kullanmak için örneğinin EmojiCompat.InitCallback sınıf. Telefonla arama ve örnek iletinizin örneğini EmojiCompat.InitCallback sınıf. EmojiCompat desteğinin başlatılması başarılı olursa EmojiCompat sınıfın onInitialized() yöntemidir. Kitaplık başlatılamıyor, EmojiCompat sınıfın onFailed() yöntemidir.

Başlatma durumunu istediğiniz zaman kontrol etmek için şunu arayın: getLoadState(). yöntemidir. Aşağıdaki 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 EmojiCompat widget'ları kullanabilir başlangıç fiyatı: AppCompat widgets.

  1. 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"
          }
          
  2. EmojiCompat hesabını kullan Düzende AppCompat Widget widget XML'ler.
  3. <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ığı da yazı tipi sürümü olarak sunulur. Bu pakette meta verileri bulabilirsiniz. Pakette ayrıca bir BundledEmojiCompatConfig. Meta verileri yüklemek için AssetManager kullanan kullanabilirsiniz.

Not: Yazı tipi boyutu birden çok megabayt.

Destek kitaplığı bağımlılığı ekleme

EmojiCompat destek kitaplığını kullanmak için paket halinde sunulan yazı tipi yapılandırmasında, uygulama projenizin bağımlılıklarını nasıl ortaya koyabileceğinizi açıklayacağız.

Uygulama projenize destek kitaplığı eklemek için:

  1. Uygulamanızın build.gradle dosyasını açın.
  2. 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

Toplu yazı tiplerini kullanarak EmojiCompat, aşağıdaki adımları uygulayın:

  1. BundledEmojiCompatConfig hesabını kullan (EmojiCompat öğesinin bir örneğini oluşturmak için) ve Context örneğini sağlayın.
  2. Şunu çağırın: init(). ilk kullanıma hazırlama yöntemi EmojiCompat ve BundledEmojiCompatConfig.

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 kullanımları Doğru resimleri oluşturmak için EmojiSpan. Dolayısıyla, belirli bir CharSequence öğesini Şunlarla Spanned örnek: EmojiSpans. İlgili içeriği oluşturmak için kullanılan EmojiCompat sınıfı, CharSequences şuna dönüştür: Spanned örnek ve EmojiSpans. Bu yöntem kullanıldığında ham dize yerine işlenen örnekleri işleyip ö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'ı kullanma

EmojiCompat destek kitaplığını kullanarak klavyeler, kullandıkları uygulama tarafından desteklenen emojiyi yardımcı olur. IME'ler hasEmojiGlyph(). EmojiCompat adlı özelliğin uygun olup olmadığını kontrol etme yöntemi gösteriliyor. Bu yöntemle CharSequence bir emojiyi verir ve true EmojiCompat, emoji'ye dokunun.

Klavye, uygulamanızın sürümünü EmojiCompat, uygulamanın desteklediği kitaplığı Palette hangi emojinin oluşturulacağını belirlemeyi destekler. Kontrol etmek için sürümü varsa, klavyenin aşağıdaki anahtarın bulunduğu EditorInfo.extras. grup:

Anahtarları aldıktan sonra EditorInfo.extras paketi, klavye, hasEmojiGlyph() yöntemidir; burada metadataVersion değeri EDITOR_INFO_METAVERSION_KEY, uygulamanın belirli bir emoji oluşturup oluşturamayacağını kontrol etmek için.

EmojiCompat'ı özel widget'larla kullanma

Dilediğiniz zaman process() uygulamasını kullanabilirsiniz yönteminde CharSequence değerini uygulamanızda ön işleme Spanned örneklerini oluşturabilen herhangi bir widget'a ekler; şunun için: örnek, TextView. Ayrıca, EmojiCompat şu widget'ı sağlar: özel widget'larınızı emoji desteğiyle zenginleştirmenizi sağlayan özel ortaya çıkarmasını sağlamaya yardımcı olur.

Örnek TextView

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() {
       ...
   }
}
Örnek EditText

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?
  • Emoji yazı tipleri (mevcut değilse) ilk istekte indirilir cihaz üzerinde. İndirme planlaması uygulama için şeffaftır.

  • İlk kullanıma hazırlama işlemi ne kadar sürer? 'nı inceleyin.
  • Yazı tipi indirildikten sonra yaklaşık 150 milisaniye EmojiCompat ilk kullanıma hazırlanır.

  • EmojiCompat destek kitaplığı ne kadar bellek kullanıyor?
  • Şu anda, emojileri bulmak için kullanılan veri yapısı, uygulamanın belleğe sahiptir ve yaklaşık 200 KB kullanır.

  • EmojiCompat'ı özel bir TextView için kullanabilir miyim?
  • Evet. EmojiCompat, özel widget'lar için yardımcı sınıflar sağlar. Aynı zamanda belirli bir dizeyi önceden işlemek ve Spanned Widget yardımcısı hakkında daha fazla bilgi için daha fazla bilgi edinmek için EmojiCompat'ı özel widget'larla kullanma bölümüne ekleyin.

  • Şu cihazlarda düzen XML'lerine widget eklersem ne olur? Android 4.4 (API düzeyi 19) veya önceki sürümlerde çalışırsanız ne olur?
  • EmojiCompat dahil edebilirsiniz cihazları destekleyen uygulamalarınızda kitaplığı veya widget'larını destekleyin Android 4.4 (API düzeyi 19) veya önceki sürümleri çalıştıranlar. Ancak, bir cihaz API düzeyi 19'dan önceki bir Android sürümünde EmojiCompat ve widget'ları bir "işlem yok" durumu. Bunun anlamı, EmojiTextView tam olarak davranıyor normal bir TextView gibi. EmojiCompat örneği; hemen alır LOAD_STATE_SUCCEEDED init() yöntemidir.

Ek kaynaklar

EmojiCompat. kitaplıksa EmojiCompat adlı videoları izleyin.