Плавающая клавиатура - PullRequest
       25

Плавающая клавиатура

0 голосов
/ 19 февраля 2020

Я пытаюсь создать пользовательскую клавиатуру для Android.

Я успешно создал один, но у меня возникают проблемы, когда я перемещаю и перемещаю его, или делаю его слишком высоким.

Если я перемещаю его, обновляя координаты x и y окна LayoutParams, когда я go вверх, сфокусированный EditText тоже идет вверх, и мне нужно, чтобы он оставался на своем месте. EditText также повышается, если я создаю клавиатуру, которая не двигается, но очень высокая.

Есть ли способ отсоединить клавиатуру и связанный с ней EditText?

Соответствующий код, MyInputIMethodService:

import android.inputmethodservice.InputMethodService
import android.view.View
import android.view.inputmethod.InputMethodManager

class MyInputIMethodService : InputMethodService() {

    private lateinit var keyboardDragDelegate: KeyboardDragDelegate
    private lateinit var view: MyKeyboardView
    private lateinit var mInputMethodManager: InputMethodManager

    override fun onCreate() {
        super.onCreate()
        mInputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        keyboardDragDelegate = KeyboardDragDelegate(this, window.window!!)
    }

    override fun isFullscreenMode(): Boolean {
        window?.window?.decorView?.findViewById<View>(android.R.id.content)?.systemUiVisibility = View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        return super.isFullscreenMode()
    }

    override fun onEvaluateFullscreenMode(): Boolean {
        return false
    }

    private val navBarHeight: Int
        get() {
            val resources = resources
            val resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android")
            return if (resourceId > 0) {
                resources.getDimensionPixelSize(resourceId)
            } else 0
        }

    override fun onComputeInsets(outInsets: Insets) {
        outInsets.contentTopInsets = view.height + navBarHeight + (window.window?.attributes?.y ?: 0)
    }

    override fun onCreateInputView(): View {
        view = MyKeyboardView(context = this).apply {
            //button listeners here...
        }
        return view
    }
}

Я также пытался сделать клавиатуру полноэкранной с прозрачностью, но затем с пользовательским интерфейсом за ней невозможно взаимодействовать.

Я знаю, что это возможно, поскольку, по крайней мере, Siwftkey делает это.

Может ли кто-нибудь мне помочь?

Спасибо

...