هدف کتابخانه پشتیبانی EmojiCompat
این است که دستگاه های اندرویدی را با جدیدترین شکلک ها به روز نگه دارد. از نشان دادن کاراکترهای ایموجی گمشده به شکل ☐ که نشان میدهد دستگاه شما فونتی برای نمایش متن ندارد، از نمایش برنامه شما جلوگیری میکند. با استفاده از کتابخانه پشتیبانی EmojiCompat
، کاربران برنامه شما برای دریافت جدیدترین ایموجی نیازی به انتظار برای به روز رسانی سیستم عامل اندروید ندارند.
![دستگاههایی که شکلکها را نشان میدهند](https://developer.android.google.cn/static/guide/topics/ui/images/look-and-feel/emoji-compat/emoji-comparison.png?hl=fa)
به منابع مرتبط زیر مراجعه کنید:
EmojiCompat چگونه کار می کند؟
کتابخانه پشتیبانی EmojiCompat
کلاسهایی را برای پیادهسازی پشتیبانی از شکلکهای سازگار با عقب در دستگاههای دارای Android 4.4 (سطح API 19) و بالاتر ارائه میدهد. می توانید EmojiCompat
با فونت های همراه یا قابل دانلود پیکربندی کنید. برای اطلاعات بیشتر در مورد پیکربندی، به بخش های زیر مراجعه کنید:
EmojiCompat
ایموجیها را برای یک CharSequence
مشخص میکند، در صورت لزوم با EmojiSpans
جایگزین میکند و در نهایت شکلکهای اموجی را رندر میکند. شکل 2 روند را نشان می دهد.
![فرآیند EmojiCompat](https://developer.android.google.cn/static/guide/topics/ui/images/look-and-feel/emoji-compat/architecture.png?hl=fa)
پیکربندی فونت های قابل دانلود
پیکربندی فونتهای قابل دانلود از ویژگی کتابخانه پشتیبانی از فونتهای دانلود برای دانلود فونت ایموجی استفاده میکند. همچنین فرادادههای Emoji ضروری را که کتابخانه پشتیبانی EmojiCompat
برای همگام شدن با آخرین نسخههای مشخصات یونیکد به آن نیاز دارد، بهروزرسانی میکند.
افزودن وابستگی به کتابخانه پشتیبانی
برای استفاده از کتابخانه پشتیبانی EmojiCompat
، باید وابستگی های مسیر کلاس پروژه برنامه خود را در محیط توسعه خود تغییر دهید.
برای افزودن یک کتابخانه پشتیبانی به پروژه برنامه خود:
- فایل
build.gradle
برنامه خود را باز کنید. - کتابخانه پشتیبانی را به بخش
dependencies
اضافه کنید.
شیار
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
کاتلین
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
راه اندازی پیکربندی فونت قابل دانلود
شما باید EmojiCompat
مقداردهی اولیه کنید تا متادیتا و فونت فیس بارگیری شود. از آنجایی که مقداردهی اولیه ممکن است زمان ببرد، فرآیند مقداردهی اولیه روی یک رشته پس زمینه اجرا می شود.
برای مقداردهی اولیه EmojiCompat
با پیکربندی فونت قابل دانلود، مراحل زیر را انجام دهید:
- نمونه ای از کلاس
FontRequest
ایجاد کنید و مرجع ارائه دهنده فونت، بسته ارائه دهنده فونت، پرس و جو فونت و لیستی از مجموعه های هش را برای گواهی ارائه دهید. برای اطلاعات بیشتر در موردFontRequest
، به بخش استفاده از فونت های دانلودی به صورت برنامه ای در مستندات فونت های دانلودی مراجعه کنید. - یک نمونه از
FontRequestEmojiCompatConfig
ایجاد کنید و نمونه هایی ازContext
وFontRequest
را ارائه دهید. -
EmojiCompat
با فراخوانی متدinit()
راه اندازی کنید و نمونهFontRequestEmojiCompatConfig
را ارسال کنید. - از ویجت های
EmojiCompat
در XML های طرح بندی استفاده کنید. اگر ازAppCompat
استفاده می کنید، به بخش Using EmojiCompat widgets with AppCompat مراجعه کنید.
کاتلین
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) } }
جاوا
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
با پیکربندی فونت قابل دانلود، به Emoji Compatibility نمونه برنامه Java | کاتلین .
اجزای کتابخانه
![اجزای کتابخانه در فرآیند EmojiCompat](https://developer.android.google.cn/static/guide/topics/ui/images/look-and-feel/emoji-compat/basic-components.png?hl=fa)
- ابزارک ها:
EmojiEditText
،EmojiTextView
،EmojiButton
- اجرای پیشفرض ویجت برای استفاده از
EmojiCompat
باTextView
،EditText
وButton
. -
EmojiCompat
- سطح عمومی اصلی برای کتابخانه پشتیبانی. تمام تماس های خارجی را انجام می دهد و با سایر قسمت های سیستم هماهنگ می شود.
-
EmojiCompat.Config
- نمونه singleton را برای ایجاد پیکربندی می کند.
-
EmojiSpan
- یک زیرکلاس
ReplacementSpan
که جایگزین کاراکتر (دنباله ها) می شود و گلیف را رندر می کند. - قلم
EmojiCompat
-
EmojiCompat
از یک فونت برای نمایش ایموجی استفاده می کند. این فونت نسخه اصلاح شده فونت ایموجی اندروید است. فونت به صورت زیر اصلاح می شود:- برای ارائه سازگاری به عقب برای ارائه ایموجی، همه کاراکترهای ایموجی با یک نقطه کد یونیکد در منطقه استفاده خصوصی تکمیلی یونیکد-A که با U+F0001 شروع میشود، نشان داده میشوند.
- فراداده اضافی emoji در قالب باینری در فونت درج می شود و در زمان اجرا توسط
EmojiCompat
تجزیه می شود. داده ها در جدولmeta
فونت با برچسب خصوصی Emji جاسازی شده است.
گزینه های پیکربندی
می توانید از نمونه EmojiCompat
برای تغییر رفتار EmojiCompat
استفاده کنید. برای تنظیم پیکربندی می توانید از روش های زیر از کلاس پایه استفاده کنید:
-
setReplaceAll()
: تعیین می کند که آیاEmojiCompat
باید همه ایموجی هایی را که پیدا می کند باEmojiSpans
جایگزین کند یا خیر. بهطور پیشفرض،EmojiCompat
تمام تلاش خود را میکند تا بفهمد آیا سیستم میتواند یک ایموجی را ارائه کند و جایگزین آن شکلکها نمیشود. وقتی رویtrue
تنظیم شود،EmojiCompat
همه شکلکهایی را که پیدا میکند باEmojiSpans
جایگزین میکند. -
setEmojiSpanIndicatorEnabled()
: نشان می دهد که آیاEmojiCompat
یک ایموجی را باEmojiSpan
جایگزین کرده است یا خیر. هنگامی که رویtrue
تنظیم می شود،EmojiCompat
یک پس زمینه برایEmojiSpan
ترسیم می کند. این روش عمدتاً برای اهداف اشکال زدایی استفاده می شود. -
setEmojiSpanIndicatorColor()
: رنگ را برای نشان دادنEmojiSpan
تنظیم می کند. مقدار پیش فرضGREEN
است. -
registerInitCallback
: به برنامه در مورد وضعیت اولیه سازیEmojiCompat
اطلاع می دهد.
کاتلین
val config = FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(object: EmojiCompat.InitCallback() { ... })
جاوا
EmojiCompat.Config config = new FontRequestEmojiCompatConfig(...) .setReplaceAll(true) .setEmojiSpanIndicatorEnabled(true) .setEmojiSpanIndicatorColor(Color.GREEN) .registerInitCallback(new InitCallback() {...})
اضافه کردن شنوندگان اولیه
کلاسهای EmojiCompat
و EmojiCompat
متدهای registerInitCallback()
و unregisterInitCallback()
را برای ثبت یک فراخوان اولیه ارائه میکنند. برای استفاده از این روش ها، نمونه ای از کلاس EmojiCompat.InitCallback
ایجاد کنید. این متدها را فراخوانی کنید و نمونه کلاس EmojiCompat.InitCallback
را پاس کنید. هنگامی که مقداردهی اولیه کتابخانه پشتیبانی EmojiCompat
موفقیت آمیز باشد، کلاس EmojiCompat
متد onInitialized()
فراخوانی می کند. اگر کتابخانه نتواند مقداردهی اولیه کند، کلاس EmojiCompat
متد onFailed()
فراخوانی می کند.
برای بررسی وضعیت اولیه سازی در هر نقطه، متد getLoadState()
را فراخوانی کنید. یکی از مقادیر زیر را برمی گرداند: LOAD_STATE_LOADING
، LOAD_STATE_SUCCEEDED
، یا LOAD_STATE_FAILED
.
استفاده از EmojiCompat با ابزارک های AppCompat
اگر از AppCompat widgets
استفاده میکنید، میتوانید از ابزارکهای EmojiCompat
استفاده کنید که از AppCompat widgets
گسترش یافتهاند.
- کتابخانه پشتیبانی را به بخش وابستگی ها اضافه کنید.
شیار
dependencies { ... implementation "androidx.emoji:emoji-bundled:$version" }
کاتلین
dependencies { implementation("androidx.emoji:emoji-appcompat:$version") }
شیار
dependencies { implementation "androidx.emoji:emoji-appcompat:$version" }
- از ویجت های
EmojiCompat
AppCompat Widget
در طرح بندی XML استفاده کنید.<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"/>
پیکربندی فونت های همراه
کتابخانه پشتیبانی
EmojiCompat
نیز در یک نسخه فونت همراه موجود است. این بسته شامل فونت با ابرداده تعبیه شده است. این بسته همچنین شامل یکBundledEmojiCompatConfig
است که ازAssetManager
برای بارگذاری متادیتا و فونت ها استفاده می کند.توجه: اندازه فونت چند مگابایت است.
افزودن وابستگی به کتابخانه پشتیبانی
برای استفاده از کتابخانه پشتیبانی
EmojiCompat
با پیکربندی فونت همراه، باید وابستگی های مسیر کلاس پروژه برنامه خود را در محیط توسعه خود تغییر دهید.برای افزودن یک کتابخانه پشتیبانی به پروژه برنامه خود:
- فایل
build.gradle
برنامه خود را باز کنید. - کتابخانه پشتیبانی را به بخش
dependencies
اضافه کنید.
شیار
dependencies { ... implementation "androidx.emoji:emoji:28.0.0" }
کاتلین
dependencies { ... implementation("androidx.emoji:emoji:28.0.0") }
استفاده از فونت های همراه برای پیکربندی EmojiCompat
برای استفاده از فونتهای همراه برای پیکربندی
EmojiCompat
، مراحل زیر را انجام دهید:- از
BundledEmojiCompatConfig
برای ایجاد یک نمونه ازEmojiCompat
و ارائه نمونه ای ازContext
استفاده کنید. - برای مقداردهی اولیه
EmojiCompat
و ارسال نمونهBundledEmojiCompatConfig
متدinit()
را فراخوانی کنید.
کاتلین
class MyApplication : Application() { override fun onCreate() { super.onCreate() val config = BundledEmojiCompatConfig(this) EmojiCompat.init(config) } }
جاوا
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); EmojiCompat.Config config = new BundledEmojiCompatConfig(this); EmojiCompat.init(config); ... } }
استفاده از EmojiCompat بدون ویجت
EmojiCompat
ازEmojiSpan
برای ارائه تصاویر صحیح استفاده می کند. بنابراین، باید هرCharSequence
را باEmojiSpans
به نمونههایSpanned
تبدیل کند. کلاسEmojiCompat
روشی را برای تبدیلCharSequences
به نمونه هایSpanned
باEmojiSpans
ارائه می دهد. با استفاده از این روش، میتوانید نمونههای پردازششده را بهجای رشته خام پردازش و ذخیره کنید، که باعث بهبود عملکرد برنامه شما میشود.کاتلین
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
جاوا
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
استفاده از EmojiCompat برای IME
با استفاده از کتابخانه پشتیبانی
EmojiCompat
، صفحهکلیدها میتوانند شکلکهایی را که توسط برنامهای که در حال تعامل با آن هستند، پشتیبانی میکنند. IME ها می توانند از متدhasEmojiGlyph()
برای بررسی اینکه آیاEmojiCompat
قادر به ارائه ایموجی است یا خیر استفاده کنند. این روش یکCharSequence
از یک ایموجی را می گیرد و اگرEmojiCompat
بتواند ایموجی را شناسایی و ارائه دهد،true
برمی گرداند.صفحهکلید همچنین میتواند نسخه کتابخانه پشتیبانی
EmojiCompat
را که برنامه پشتیبانی میکند بررسی کند تا مشخص کند کدام شکلک را در پالت ارائه میکند. برای بررسی نسخه، در صورت موجود بودن، صفحه کلید باید بررسی کند که آیا کلیدهای زیر در بستهEditorInfo.extras
وجود دارند یا خیر:-
EDITOR_INFO_METAVERSION_KEY
-
EDITOR_INFO_REPLACE_ALL_KEY
اگر کلید در بسته وجود داشته باشد، مقدار نشاندهنده نسخه فراداده شکلکهایی است که برنامه استفاده میکند. اگر این کلید وجود نداشته باشد، برنامه از
EmojiCompat
استفاده نمی کند.اگر کلید وجود داشته باشد و روی
true
تنظیم شده باشد، این نشان می دهد که برنامه متدSetReplaceAll()
را فراخوانی کرده است. برای اطلاعات بیشتر در مورد پیکربندیEmojiCompat
، به بخش تنظیمات پیکربندی مراجعه کنید.پس از دریافت کلیدهای بسته
EditorInfo.extras
، صفحهکلید میتواند از روشhasEmojiGlyph()
استفاده کند، جایی کهmetadataVersion
مقدارEDITOR_INFO_METAVERSION_KEY
است، تا بررسی کند آیا برنامه میتواند یک شکلک خاص را ارائه کند یا خیر.استفاده از EmojiCompat با ویجت های سفارشی
همیشه می توانید از متد
process()
برای پیش پردازشCharSequence
در برنامه خود استفاده کنید و آن را به هر ویجتی که می تواند نمونه هایSpanned
را ارائه کند اضافه کنید. به عنوان مثال،TextView
. علاوه بر این،EmojiCompat
کلاسهای کمکی ابزارک زیر را ارائه میکند تا به شما امکان میدهد ویجتهای سفارشی خود را با پشتیبانی از ایموجی با حداقل تلاش غنی کنید.- TextView نمونه
- ویرایش متن نمونه
کاتلین
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) } }
جاوا
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() { ... } }
کاتلین
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 } }
جاوا
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() { ... } }
سوالات متداول
- چگونه دانلود فونت را شروع کنم؟
- مقداردهی اولیه چقدر طول می کشد؟
- کتابخانه EmojiCompat از چه مقدار حافظه استفاده می کند؟
- آیا می توانم از EmojiCompat برای TextView سفارشی استفاده کنم؟
- اگر ویجتها را در طرحبندی XML در دستگاههایی که دارای Android نسخه 4.4 (سطح API 19) یا پایینتر هستند، اضافه کنم، چه اتفاقی میافتد؟
فونت های ایموجی در صورت عدم وجود در دستگاه، در اولین درخواست دانلود می شوند. زمانبندی دانلود برای برنامه شفاف است.
پس از دانلود فونت، تقریباً 150 میلی ثانیه طول می کشد تا
EmojiCompat
مقداردهی اولیه شود.در حال حاضر، ساختار داده برای یافتن ایموجی در حافظه برنامه بارگذاری شده است و از حدود 200 کیلوبایت استفاده می کند.
بله. EmojiCompat کلاس های کمکی را برای ویجت های سفارشی ارائه می دهد. همچنین امکان پیش پردازش یک رشته داده شده و تبدیل آن به
Spanned
وجود دارد. برای اطلاعات بیشتر در مورد کلاس های کمکی ویجت، به بخش استفاده از EmojiCompat با ابزارک های سفارشی مراجعه کنید.میتوانید کتابخانه پشتیبانی
EmojiCompat
یا ویجتهای آن را در برنامههای خود قرار دهید که از دستگاههای دارای Android 4.4 (سطح API 19) یا پایینتر پشتیبانی میکنند. با این حال، اگر دستگاهی بر روی نسخه اندرویدی قبل از سطح API 19 اجرا شود،EmojiCompat
و ویجتهای آن در حالت "بدون عملیات" هستند. این بدان معنی است کهEmojiTextView
دقیقاً مانند یکTextView
معمولی رفتار می کند. نمونهEmojiCompat
؛ هنگامی که متدinit()
فراخوانی می کنید، بلافاصله به حالتLOAD_STATE_SUCCEEDED
می رسد.منابع اضافی
برای اطلاعات بیشتر در مورد استفاده از کتابخانه
EmojiCompat
، EmojiCompat را تماشا کنید.محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2024-08-20 بهوقت ساعت هماهنگ جهانی.
[] [] { "last_modified": "تاریخ آخرین بهروزرسانی 2024-08-20 بهوقت ساعت هماهنگ جهانی.", "state": "" } - از ویجت های