Клавиши не нажимаются на пользовательской клавиатуре во Flutter AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Клавиши не нажимаются на пользовательской клавиатуре во Flutter Android

Сообщение Anonymous »

Я разработал собственную клавиатуру во Flutter в Android, и я сделал пользовательский интерфейс таким же, как и обычная клавиатура, и она выглядит так же, но когда я нажимаю на клавиши, они не нажимаются, так почему это происходит, может ли кто-нибудь мне помочь в этом?
Что я сделал, описано здесь

Код: Выделить всё

RewriterKeyboardService.kt
package com.arleven.rephraseplus

import android.inputmethodservice.InputMethodService
import android.view.View
import android.widget.Button
import android.widget.FrameLayout
import android.view.inputmethod.InputConnection
import io.flutter.embedding.android.FlutterView
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.embedding.engine.dart.DartExecutor
import io.flutter.plugin.common.MethodChannel
import io.flutter.FlutterInjector

class RewriteKeyboardService : InputMethodService() {

private var inputConnection: InputConnection? = null
private lateinit var flutterEngine: FlutterEngine

override fun onStartInput(attribute: android.view.inputmethod.EditorInfo?, restarting: Boolean) {
super.onStartInput(attribute, restarting)
inputConnection = currentInputConnection
}

override fun onCreateInputView(): View {
val view = layoutInflater.inflate(R.layout.keyboard_view, null)

val flutterContainer = view.findViewById(R.id.flutter_toolbar_container)
attachFlutterToolbar(flutterContainer)

setupKeyboard(view)

return view
}

private fun setupKeyboard(view: View) {

val letterKeys = listOf(
"Q","W","E","R","T","Y","U","I","O","P",
"A","S","D","F","G","H","J","K","L",
"Z","X","C","V","B","N","M"
)

letterKeys.forEach { key ->
val resId = resources.getIdentifier(
"key_${key.lowercase()}",
"id",
packageName
)
if (resId != 0) {
view.findViewById(resId)?.setOnClickListener {
inputConnection?.commitText(key, 1)
}
}
}

// Space
view.findViewById(R.id.key_space)?.setOnClickListener {
inputConnection?.commitText(" ", 1)
}

// Backspace
view.findViewById(R.id.key_backspace)?.setOnClickListener {
inputConnection?.deleteSurroundingText(1, 0)
}

// Enter
view.findViewById(R.id.key_enter)?.setOnClickListener {
inputConnection?.sendKeyEvent(
android.view.KeyEvent(
android.view.KeyEvent.ACTION_DOWN,
android.view.KeyEvent.KEYCODE_ENTER
)
)
}
}

private fun attachFlutterToolbar(container: FrameLayout) {
flutterEngine = FlutterEngine(this)

flutterEngine.dartExecutor.executeDartEntrypoint(
DartExecutor.DartEntrypoint(
FlutterInjector.instance()
.flutterLoader()
.findAppBundlePath(),
"keyboardToolbarMain"
)
)

val flutterView = FlutterView(this)

val density = resources.displayMetrics.density
val toolbarHeightPx = (56 * density).toInt()

flutterView.layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
toolbarHeightPx
)

// 🔥 THIS IS THE KEY FIX
flutterView.setOnTouchListener { _, _ ->
false // 👈 DO NOT CONSUME TOUCH EVENTS
}

flutterView.isClickable = false
flutterView.isFocusable = false
flutterView.isFocusableInTouchMode = false

flutterView.attachToFlutterEngine(flutterEngine)

container.addView(flutterView)
}

override fun onEvaluateFullscreenMode(): Boolean = false

override fun onDestroy() {
if (::flutterEngine.isInitialized) {
flutterEngine.destroy()
}
super.onDestroy()
}
}

Код: Выделить всё

styles.xml





match_parent
48dp
horizontal
center
6dp




0dp
1
match_parent
3dp


true
true
true

@drawable/key_bg
#000000
16sp




@drawable/key_bg_special




5
@drawable/key_bg_wide




false
true
false
false
@android:color/transparent



Код: Выделить всё

keyboard_view.xml









































































сначала я попробовал добавить только 4 клавиши, которые были намного больше, я попробовал это для тестирования, и они работали, а также нажимались, так это потому, что на этой клавиатуре клавиши маленькие, но в обычном Gboard клавиши выглядят только так
Пожалуйста, дайте мне знать, если я что-то упускаю

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

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

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

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

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

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