【问题标题】:Android Keyboard causes Status Bar to reappearAndroid 键盘导致状态栏重新出现
【发布时间】:2019-01-31 05:25:06
【问题描述】:

我需要在我的应用中隐藏 Android 状态栏,所以我使用以下代码

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

main() {
  SystemChrome.setEnabledSystemUIOverlays([]);
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            body: Center(child: TextField()), backgroundColor: Colors.orange));
  }
}

我在屏幕上有一个textfield,所以每当 Android 键盘打开时,状态栏就会重新出现。 我已经尝试了多个 Android 设备,但我遇到了同样的错误。

这真的是框架中的错误还是我做错了什么?

我在下面附上了一个简短的视频链接来展示这个错误

https://drive.google.com/file/d/19qs5Rsrfc_G1oN5kbxgKvYQAXpTr8RZx/view?usp=sharing

我没有在iOS测试过

【问题讨论】:

    标签: dart flutter android-softkeyboard android-statusbar


    【解决方案1】:

    请分享一些代码。我尝试在initState() 中添加SystemChrome.setEnabledSystemUIOverlays([]); 并且我有一个文本字段,它工作正常。

    【讨论】:

    • 我已经在问题中添加了代码,请看一下
    • 在真机上查看
    • 在真实设备上检查了您的代码。对我来说工作得很好。分享要展示的视频
    • 您使用的设备和安卓版本。我正在使用带有 Android Marshmallow 的 Redmi
    【解决方案2】:

    我所做的是在显示键盘后,延迟 2(文档说一)秒,然后再次调用 setEnabledSystemUIOverlays。

    Future.delayed(Duration(seconds: 2)).then((value) => SystemChrome.setEnabledSystemUIOverlays([]));
    

    根据:https://api.flutter.dev/flutter/services/SystemChrome/setEnabledSystemUIOverlays.html

    当键盘变得可见时,它将启用导航栏和状态栏系统 UI 覆盖。当键盘关闭时,Android 不会恢复之前的 UI 可见性设置,并且要在键盘关闭 1 秒后才能更改 UI 可见性,以防止恶意软件锁定用户的导航按钮。

    要在文本输入后重新获得“全屏”,应在延迟 1 秒后重新设置 UI 叠加层。这可以通过 restoreSystemUIOverlays 或再次调用来实现。否则,只有在应用失去焦点并重新获得焦点时,才会自动恢复原始 UI 覆盖设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多