如何在android中同时在两个显示器上显示键盘?

问题描述 投票:0回答:1

我想在主显示器和辅助显示器中显示键盘。

但是键盘显示在任何一个显示器上。让我知道是否有任何解决办法可以在两个显示器中显示键盘[通过使用 android 默认键盘]?

实际行为: 当我将光标保持在主显示屏上时,会显示键盘。 现在,当我将光标保持在辅助显示器上时,键盘会在主显示器中关闭并在辅助显示器中显示。

预期行为: 在两种显示中,都应显示键盘。

平台:Android 12及以上? 如果不可能,那么信息娱乐等多显示器如何在乘客和中央显示器上显示键盘?

以下 POC 仅适用于一种显示器,不适用于其他显示器。 Android 有没有什么API可以用来处理并让我知道如何使用?

class MainActivity : AppCompatActivity() {
    private lateinit var displayManager: DisplayManager
    private lateinit var inputMethodManager: InputMethodManager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Get display and input method managers
        displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
        inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

        // Set up multiple displays
        setupMultipleDisplays()
    }

    private fun setupMultipleDisplays() {
        // Get all available displays
        val displays = displayManager.displays

        // Check if we have at least two displays
        if (displays.size >= 2) {
            try {
                // Create presentation for the second display
                val secondaryDisplay = displays[1]
                val secondaryPresentation = SecondaryDisplayPresentation(this, secondaryDisplay)
                secondaryPresentation.show()

                // Set up input for both displays
                setupDisplayInputs(displays)
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }

    private fun setupDisplayInputs(displays: Array<Display>) {
        // Primary display input - use safe null check
        val primaryEditText: EditText? = findViewById(R.id.primaryEditText)
        primaryEditText?.setOnFocusChangeListener { view, hasFocus ->
            if (hasFocus) {
                showSoftInput(view, displays[0])
            }
        }

        // Secondary display input - use safe null check
        val secondaryEditText: EditText? = findViewById(R.id.secondaryEditText)
        secondaryEditText?.setOnFocusChangeListener { view, hasFocus ->
            if (hasFocus) {
                showSoftInput(view, displays[1])
            }
        }
    }

    private fun showSoftInput(view: View, display: Display) {
        // Show soft input keyboard on the specific display
        view.requestFocus()

        // Show soft input keyboard
        inputMethodManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
    }

    // Secondary display presentation
    inner class SecondaryDisplayPresentation(
        context: Context,
        display: Display
    ) : Presentation(context, display) {

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.custom_keyboard)
        }
    }
}

实际输出:(当焦点位于辅助显示器上时,键盘不会在主显示器中显示)如下图所示:

https://i.sstatic.net/nubYyacP.png

预期输出:键盘应在主显示屏和辅助显示屏中显示。

android kotlin android-source android-softkeyboard android-automotive
1个回答
0
投票

我想在主显示器和辅助显示器中显示键盘

手机和平板电脑的原生 Android 不提供此功能。据我所知,没有任何设备制造商为辅助显示器提供完整的触摸屏支持,其中辅助显示器显示单独的内容(而不是主显示器的镜像)。

当然欢迎您创建自己的 Android 分支,在您自己的自定义硬件上运行,尝试支持在多个显示器上使用 IME。或者,如果 LineageOS 等项目支持您所需的硬件,您可以寻求为它们提供此类支持。或者,您可以找到提供硬件和支持多个 IME 的定制 Android 版本的人。

那么信息娱乐系统等多显示器如何在乘客显示屏和中央显示屏上显示键盘?

主要有以下三种可能性:

  1. 正如评论中指出的那样,Android Automotive 14 支持多个显示器上的 IME
  2. 汽车制造商或供应商定制Android,正如我在上面第二段中所建议的那样
  3. 汽车在不同的计算机或虚拟机管理程序会话上使用多个操作系统/操作系统副本(例如,两个运行 Android Automotive,一个运行 Android Automotive,一个运行其他程序),每个显示器都与其自己的操作系统或操作系统副本相关联
© www.soinside.com 2019 - 2024. All rights reserved.