Я пытаюсь создать пользовательскую клавиатуру для 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 делает это.
Может ли кто-нибудь мне помочь?
Спасибо