Пользовательская клавиатура Flutter показывает белый полноэкранный режим на реальном устройстве AndroidAndroid

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

Сообщение Anonymous »

Я создаю собственную клавиатуру во Flutter для Android. Клавиатура работает частично, но когда я устанавливаю ее в качестве клавиатуры по умолчанию и пытаюсь открыть ее на реальном устройстве Android, она не выглядит как клавиатура.
Вместо того, чтобы отображаться как клавиатура внизу, она открывается в белом полноэкранном режиме.

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

I tried this

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
Ответить

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

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

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

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

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