Anonymous
Пользовательская клавиатура Flutter показывает белый полноэкранный режим на реальном устройстве Android
Сообщение
Anonymous » 09 янв 2026, 14:56
Я создаю собственную клавиатуру во Flutter для Android. Клавиатура работает частично, но когда я устанавливаю ее в качестве клавиатуры по умолчанию и пытаюсь открыть на
реальном устройстве Android , она не выглядит как клавиатура.
Вместо того, чтобы отображаться как клавиатура внизу, она открывается в белом полноэкранном режиме.
Я попробовал это
Keyboard_main.dart
Код: Выделить всё
import 'package:flutter/material.dart';
@pragma('vm:entry-point')
void keyboardMain() {
runApp(const KeyboardRoot());
}
class KeyboardRoot extends StatelessWidget {
const KeyboardRoot({super.key});
@override
Widget build(BuildContext context) {
return const Directionality(
textDirection: TextDirection.ltr,
child: SimpleKeyboard(),
);
}
}
class SimpleKeyboard extends StatelessWidget {
const SimpleKeyboard({super.key});
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
height: 280, // Standard keyboard height
color: Colors.indigoAccent,
child: Column(
children: [
// Top row with actions
Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
_actionButton("Rewrite"),
_actionButton("Fix"),
_actionButton("Shorten"),
_actionButton("Tone"),
],
),
),
// Suggestions row (optional)
SizedBox(
height: 120,
child: Container(
color: Colors.white,
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: 5,
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 4.0),
child: Chip(label: Text("Suggestion ${index + 1}")),
);
},
),
),
),
// Standard keyboard bottom area
Container(
height: 50,
color: Colors.grey[200],
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
_iconButton(Icons.arrow_back),
_iconButton(Icons.space_bar),
_iconButton(Icons.keyboard_hide),
],
),
),
],
),
);
}
Widget _actionButton(String text) {
return ElevatedButton(
onPressed: () {
// Handle keyboard actions
},
child: Text(text),
);
}
Widget _iconButton(IconData icon) {
return IconButton(
onPressed: () {
// Handle icon actions
},
icon: Icon(icon),
);
}
}
RewriterKeyboardService.kt
Код: Выделить всё
package com.arleven.rephraseplus
import android.inputmethodservice.InputMethodService
import android.view.View
import android.widget.FrameLayout
import android.graphics.Color
import io.flutter.embedding.android.FlutterView
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.embedding.engine.dart.DartExecutor
import io.flutter.FlutterInjector
class RewriteKeyboardService : InputMethodService() {
private lateinit var engine: FlutterEngine
override fun onCreate() {
super.onCreate()
engine = FlutterEngine(this)
engine.dartExecutor.executeDartEntrypoint(
DartExecutor.DartEntrypoint(
FlutterInjector.instance()
.flutterLoader()
.findAppBundlePath(),
"keyboardMain"
)
)
}
override fun onCreateInputView(): View {
// 🔥 Container is REQUIRED
val container = FrameLayout(this)
val heightDp = 280
val density = resources.displayMetrics.density
val heightPx = (heightDp * density).toInt()
container.layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
heightPx
)
container.setBackgroundColor(Color.TRANSPARENT)
val flutterView = FlutterView(this)
flutterView.layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
)
flutterView.setBackgroundColor(Color.WHITE)
flutterView.attachToFlutterEngine(engine)
container.addView(flutterView)
return container
}
// 🔥 ABSOLUTELY REQUIRED
override fun onEvaluateFullscreenMode(): Boolean {
return false
}
override fun onDestroy() {
engine.destroy()
super.onDestroy()
}
}
keyboard_config.xml
пожалуйста, дайте мне знать, если что-то не хватает, и помогите в этом
Спасибо
Подробнее здесь:
https://stackoverflow.com/questions/798 ... oid-device
1767959801
Anonymous
Я создаю собственную клавиатуру во Flutter для Android. Клавиатура работает частично, но когда я устанавливаю ее в качестве клавиатуры по умолчанию и пытаюсь открыть на [b]реальном устройстве Android[/b], она не выглядит как клавиатура. Вместо того, чтобы отображаться как клавиатура внизу, она открывается в белом полноэкранном режиме. Я попробовал это [b]Keyboard_main.dart[/b] [code]import 'package:flutter/material.dart'; @pragma('vm:entry-point') void keyboardMain() { runApp(const KeyboardRoot()); } class KeyboardRoot extends StatelessWidget { const KeyboardRoot({super.key}); @override Widget build(BuildContext context) { return const Directionality( textDirection: TextDirection.ltr, child: SimpleKeyboard(), ); } } class SimpleKeyboard extends StatelessWidget { const SimpleKeyboard({super.key}); @override Widget build(BuildContext context) { return Container( width: double.infinity, height: 280, // Standard keyboard height color: Colors.indigoAccent, child: Column( children: [ // Top row with actions Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ _actionButton("Rewrite"), _actionButton("Fix"), _actionButton("Shorten"), _actionButton("Tone"), ], ), ), // Suggestions row (optional) SizedBox( height: 120, child: Container( color: Colors.white, child: ListView.builder( scrollDirection: Axis.horizontal, itemCount: 5, itemBuilder: (context, index) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 4.0), child: Chip(label: Text("Suggestion ${index + 1}")), ); }, ), ), ), // Standard keyboard bottom area Container( height: 50, color: Colors.grey[200], child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ _iconButton(Icons.arrow_back), _iconButton(Icons.space_bar), _iconButton(Icons.keyboard_hide), ], ), ), ], ), ); } Widget _actionButton(String text) { return ElevatedButton( onPressed: () { // Handle keyboard actions }, child: Text(text), ); } Widget _iconButton(IconData icon) { return IconButton( onPressed: () { // Handle icon actions }, icon: Icon(icon), ); } } [/code] [b]RewriterKeyboardService.kt[/b] [code]package com.arleven.rephraseplus import android.inputmethodservice.InputMethodService import android.view.View import android.widget.FrameLayout import android.graphics.Color import io.flutter.embedding.android.FlutterView import io.flutter.embedding.engine.FlutterEngine import io.flutter.embedding.engine.dart.DartExecutor import io.flutter.FlutterInjector class RewriteKeyboardService : InputMethodService() { private lateinit var engine: FlutterEngine override fun onCreate() { super.onCreate() engine = FlutterEngine(this) engine.dartExecutor.executeDartEntrypoint( DartExecutor.DartEntrypoint( FlutterInjector.instance() .flutterLoader() .findAppBundlePath(), "keyboardMain" ) ) } override fun onCreateInputView(): View { // 🔥 Container is REQUIRED val container = FrameLayout(this) val heightDp = 280 val density = resources.displayMetrics.density val heightPx = (heightDp * density).toInt() container.layoutParams = FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, heightPx ) container.setBackgroundColor(Color.TRANSPARENT) val flutterView = FlutterView(this) flutterView.layoutParams = FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT ) flutterView.setBackgroundColor(Color.WHITE) flutterView.attachToFlutterEngine(engine) container.addView(flutterView) return container } // 🔥 ABSOLUTELY REQUIRED override fun onEvaluateFullscreenMode(): Boolean { return false } override fun onDestroy() { engine.destroy() super.onDestroy() } } [/code] [b]keyboard_config.xml[/b] [code] [/code] пожалуйста, дайте мне знать, если что-то не хватает, и помогите в этом Спасибо Подробнее здесь: [url]https://stackoverflow.com/questions/79864126/flutter-custom-keyboard-shows-white-full-screen-on-real-android-device[/url]