Поддержка ввода на Android 9+Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Поддержка ввода на Android 9+

Сообщение Anonymous »

Я чувствую себя немного потерянным. Я создал подкласс TextureView, который должен поддерживать текстовый ввод через клавиатуру. Я проверил свой код на физическом устройстве с Android 12 и эмулятором, и он работает нормально. Но это терпит неудачу при использовании Android 9. Мне нужна поддержка для этого от Android 9+. Кто -нибудь может намекнуть меня, пожалуйста, в чем может быть проблема? Вот мой код: < /p>
import "android.content.*"
import "android.text.InputType"
import "android.util.AttributeSet"
import "android.view.*"
import "android.view.inputmethod.*"
import "androidx.core.view.ViewCompat"

val myView = object : TextureView(context as Context) {
private var inputConnection: BaseInputConnection? = null

override fun onAttachedToWindow() {
super.onAttachedToWindow()
isFocusable = true
isFocusableInTouchMode = true
requestFocus()
showKeyboard()

ViewCompat.setOnReceiveContentListener(
this,
arrayOf(ClipDescription.MIMETYPE_TEXT_PLAIN)
) { _, content ->
val text = content.clip.getItemAt(0).coerceToText(context as Context)
if (text.isNotEmpty()) {
(cbreceivecontent as Function1).invoke(text.toString())
}
null
}
}

private fun showKeyboard() {
((context as Context).getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)
.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}

override fun onCreateInputConnection(outAttrs: EditorInfo?): InputConnection {
outAttrs?.apply {
inputType = InputType.TYPE_CLASS_TEXT
imeOptions = EditorInfo.IME_ACTION_DONE
}

inputConnection = object : BaseInputConnection(this, true) {
override fun commitText(text: CharSequence?, newCursorPosition: Int): Boolean {
text?.let {
(cbcommittext as Function1).invoke(it.toString())
}
return super.commitText(text, newCursorPosition)
}
}

return inputConnection!!
}

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
event?.unicodeChar?.takeIf { it != 0 }?.let {
(cbkeydown as Function1).invoke(it.toChar().toString())
return true
}

return super.onKeyDown(keyCode, event)
}
}


Подробнее здесь: https://stackoverflow.com/questions/795 ... -android-9
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»