Tasten können in der benutzerdefinierten Tastatur in Flatter-Android nicht angetippt werdenAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Tasten können in der benutzerdefinierten Tastatur in Flatter-Android nicht angetippt werden

Post by Anonymous »

Ich habe eine benutzerdefinierte Tastatur in Flatter in Android entworfen und die Benutzeroberfläche so gestaltet, dass sie mit einer normalen Tastatur übereinstimmt, und sie sieht auch gleich aus, aber wenn ich auf Tasten tippe, sind sie nicht tippbar. Warum das passiert, kann mir jemand dabei erklären?
Was ich getan habe, ist hier

Code: Select all

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()
}
}

Code: Select all

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



Code: Select all

keyboard_view.xml









































































Zuerst habe ich versucht, nur 4 Tasten hinzuzufügen, die viel größer waren. Ich habe es zum Testen ausprobiert und sie funktionierten und waren auch tippbar. Das liegt daran, dass bei dieser Tastatur die Tasten klein sind, aber bei einem normalen Gboard sehen die Tasten nur so aus
Bitte lassen Sie mich wissen, wenn mir etwas fehlt

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post