از 27 مارس 2025، توصیه می کنیم از android-latest-release
به جای aosp-main
برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
پشتیبانی از ویرایشگر روش ورودی
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
به روز رسانی های انجام شده در این مناطق ویژه نمایشگر در زیر ارائه شده است:
اندروید 10 از صفحه کلید نرم افزاری برای برنامه هایی که روی صفحه نمایش غیر پیش فرض اجرا می شوند، پشتیبانی می کند.
برنامههایی که روی نمایشگر غیر پیشفرض اجرا میشوند
از نظر اینکه صفحه کلید نرم افزار Input Method Editor (IME) را نمایش می دهد، حالت های مختلفی وجود دارد. صفحه کلید نرم افزار در زیر نشان داده شده است:
- همان صفحه نمایشی که برنامه متمرکز روی آن ظاهر می شود.
- نمایش پیشفرض در حالی که برنامه متمرکز بر روی یک نمایشگر غیر پیشفرض اجرا میشود.
- اصلا نمایشی نداره
سیستم بر اساس تنظیمات صفحه نمایشی که برنامه متمرکز روی آن ظاهر می شود، تعیین می کند که از کدام حالت استفاده کند. برای جزئیات بیشتر، نگاه کنید به:
-
WindowManager#setDisplayImePolicy()
-
WindowManager#getDisplayImePolicy()

شکل 1. صفحه کلید نرم افزار IME همانطور که در صفحه نمایش ثانویه ظاهر می شود، از جمله برنامه هدف
این سیستم از یک IME واحد استفاده می کند، اما می تواند بین نمایشگرها جابجا شود تا تمرکز کاربر را دنبال کند. اندروید 10 به طور خودکار انتظار دارد که همه IME های شخص اول و ثالث هنگام ایجاد طرح بندی و اندازه نمایشگر جدید را تغییر دهند.
اگر یک اتصال فعال در نمایشگر A وجود داشته باشد و یک فیلد ورودی فوکوس ورودی را روی نمایشگر B درخواست کند، جریان زیر رخ می دهد:
- یک اتصال ورودی جدید از قسمت ورودی در صفحه نمایش B می آید.
-
InputMethodManagerService
بررسی می کند که آیا اتصال باید تأیید شود. - یک نمایشگر برای IME انتخاب شده است. اگر نمایشگر B از نمایش IME پشتیبانی کند و اجازه نمایش آن را داشته باشد، از B استفاده می شود. در غیر این صورت، نمایشگر اصلی دستگاه انتخاب می شود.
- اگر نمایشگر انتخاب شده از صفحه نمایش A نباشد، اتصال مجدد برقرار می شود.
InputMethodService
از بین می رود و دوباره ایجاد می شود.
محدودیت امنیتی
سیستم IME را در نمایشگرهای مجازی که متعلق به سیستم نیستند نشان نمی دهد. این به دلیل یک نگرانی امنیتی است که یک برنامه مخرب می تواند یک نمایشگر مجازی با پشتیبانی از تزئینات سیستم فعال ایجاد کند و اطلاعات حساس کاربر را از روی سطح بخواند، مانند پیش بینی های تایپ و پس زمینه های سفارشی.
پیاده سازی
در Android 9 (و پایینتر)، IME فقط در صفحه پیشفرض موجود بود، همانطور که در روشهای ورودی روی صفحه توضیح داده شده است. در اندروید 10 (و بالاتر)، کاربر میتواند با تغییر فوکوس بین فیلدهای متن ورودی مختلف در نمایشگرهای مختلف جابهجا شود و پنجره IME به نمایشگرهای ثانویه منتقل میشود.
پیاده سازی در WindowManager
پنجره روش ورودی (پنجره IME که در آن صفحه کلید نرم ترسیم شده است) و هدف روش ورودی (پنجره ای که ورودی IME در آن می رود) را برای مدیریت وضعیت IME ردیابی می کند.
برای InputMethodManagerService
(IMMS)، هیچ مکانیزم داخلی دیگری نمی تواند تغییر صفحه نمایش را به InputMethodService
(IMS) منتشر کند و هنگام انتقال فوکوس به نمایشگر دیگری، طرح صفحه کلید را در زمان اجرا پیکربندی مجدد کند.
برای دستیابی به سوئیچ پنجره IME بین نمایشگرها، Android 10 موارد زیر را اجرا می کند:
- IME و پنجره هدف ورودی اکنون در هر نمایشگر در
DisplayContent#mInputMethodWindow
و DisplayContent#mInputMethodTarget
ردیابی می شوند، به طوری که WindowManager (WM) می تواند وضعیت فوکوس IME را مستقل از هر نمایشگر مدیریت کند. - در سمت IMMS، هنگامی که درخواست فوکوس مشتری برنامه از صفحه نمایش خارجی از طریق
ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus
دریافت می شود، ابتدا پنجره ورودی فعلی را مجدداً به سرویس متد ورودی جدید برای IME باز می کند. نمایش در onServiceConnected()
. - در سمت IMS، پس از دریافت
IMS#attachToken
، جریان زیر رخ می دهد:-
ContextImpl#updateDisplay
برای به روز رسانی صفحه نمایش زمینه سرویس در InputMethodService#attachToken()
فراخوانی می شود. این ViewGroup#addView()
را فراخوانی میکند تا طرحبندی صفحهکلید را اصلاح کند و با صفحهنمایش مورد نظر سازگار شود و زمینه فعلی را بررسی کند. - پس از فراخوانی
DisplayContent#setInputMethodWindowLocked()
، پیاده سازی تغییرات پیکربندی نمایشگر در سطح فرآیند را با استفاده از WindowProcessController
به فرآیند IME ارسال می کند تا منابع و معیارهای نمایش را لغو کند. - سرویس گیرنده
InputMethodService
پیکربندی صحیح را با معیارهای نمایش صحیح پس از onConfigurationChanged()
و فراخوانی ViewGroup#addView()
برای شروع مجدد نمای ورودی دریافت می کند.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Input method editor support\n\nUpdates made to these display-specific areas are provided below:\n\n- [Apps running on a non-default display](/docs/core/display/multi_display/ime-support#non-default)\n- [Multi-session input method editor support](/docs/core/display/multi_display/ime-support#ime-multi)\n\nAndroid 10 supports\n[software keyboard](https://developer.android.com/guide/topics/text/creating-input-method)\nfor apps running on a non-default display.\n\nApps running on a non-default display\n-------------------------------------\n\nIn terms of which display shows the software keyboard of the Input Method Editor\n(IME), there are different modes. The software keyboard is shown on the:\n\n- *Same* display on which the focused app appears.\n- *Default* display while the focused app is running on a non-default display.\n- *No* display at all.\n\nThe system determines which mode to use based on the settings of the display\non which the focused app appears. For more details, see:\n\n- `WindowManager#setDisplayImePolicy()`\n- `WindowManager#getDisplayImePolicy()`\n\n**Figure 1.** IME software keyboard as it appears on secondary display,\nincluding target app\n\nThe system uses a single IME, but can shift between displays to follow\nuser focus. Android 10 automatically expects all first- and third-party IMEs to\nrevise the layout and resize according to the new display size when created.\n\nIf there's an active connection on display A, and an input field requests\ninput focus on display B, then the following flow occurs:\n\n1. A new input connection comes from the input field on display B.\n2. `InputMethodManagerService` checks if the connection should be approved.\n3. A display is selected for the IME. If display B supports showing the IME and is allowed to show it, then B is used. Otherwise, the primary device display is selected.\n4. If the selected display is not from display A, then the connection is re-established. `InputMethodService` is destroyed and then created again.\n\n### Security restriction\n\nThe system won't show an IME on virtual displays that aren't owned by the\nsystem. This is due to a security concern that a malicious app could create a\nvirtual display with enabled\n[system decorations support](/docs/core/display/multi_display/system-decorations)\nand read user-sensitive information from the surface, such as typing predictions\nand custom backgrounds.\n\n### Implementation\n\nIn Android 9 (and lower), the IME was only available on the default screen, as\ndescribed in [On-Screen\nInput methods](https://android-developers.googleblog.com/2009/04/updating-applications-for-on-screen.html). In Android 10 (and higher), a user can switch\nbetween different input text fields on different displays by switching focus,\nand the IME window moves to the secondary displays.\n\nThe implementation in `WindowManager` tracks the input method\nwindow (the IME window where the soft keyboard is drawn) and the input method\ntarget (the window where the IME input goes) to manage the IME state.\n\nFor `InputMethodManagerService` (IMMS), no other built-in mechanism can\npropagate the display change to `InputMethodService` (IMS) and\nreconfigure the keyboard layout at runtime when moving focus to another display.\n\nTo achieve the IME window switch between displays, Android\n10 implements the following:\n\n- The IME and input target window are now tracked per display in `DisplayContent#mInputMethodWindow` and `DisplayContent#mInputMethodTarget`, so that the WindowManager (WM) can manage the IME focus state independently of each display.\n- On the IMMS side, when an app client's focus request from the external display is received through `ViewRootImpl#handleWindowFocusChanged -\u003e\n InputMethodManager#onPostWindowFocus -\u003e\n IMMS#startInputOrWindowGainedFocus`, it first unbinds the current input method service and then rebinds the service to reattach the new IME window token for the external display in `onServiceConnected()`.\n- On the IMS side, after the `IMS#attachToken` is received, the following flow occurs:\n - `ContextImpl#updateDisplay` is called to update the service context's display in `InputMethodService#attachToken()`. This calls `ViewGroup#addView()` to revise the layout of the keyboard and adapt to the target display checking the current context.\n - After `DisplayContent#setInputMethodWindowLocked()` is called, the implementation sends process-level display configuration changes using the `WindowProcessController` to IME process to override resources and display metrics.\n - The `InputMethodService` client gets the correct configuration with the correct display metrics after `onConfigurationChanged()` and the `ViewGroup#addView()` call to reinitialize the input view."]]