Android TitleBar从Flutter 3.16.5升级到3.24.1后不会消失

问题描述 投票:0回答:1

我们最近将 Flutter 应用程序升级到 3.24.1,并注意到我们的 Android 应用程序现在持续显示工具栏,似乎无论我对应用程序的主题做什么来解决这个问题。我们知道这是 Android ToolBar,而不是 Flutter 的 AppBar,因为 iOS 中不会发生这种情况:

当前

styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowBackground">@drawable/launch_background</item>
    </style>
    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowBackground">?android:colorBackground</item>
    </style>

    <style name="Theme.App.Starting" parent="Theme.SplashScreen">
        <item name="windowSplashScreenBackground">#804EFD</item>
        <item name="postSplashScreenTheme">@style/NormalTheme</item>
        <item name="windowSplashScreenAnimatedIcon">@drawable/ic_splash_layer</item>
    </style>
</resources>

AndroidManifest.xml
中的应用程序标签:

<application
    android:allowBackup="false"
    android:icon="@mipmap/ic_launcher"
    android:label="App name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    tools:replace="android:supportsRtl">

AndroidManifest.xml
中的活动标签:

<activity
    android:name=".MainActivity"       
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:exported="true"
            android:hardwareAccelerated="true"
            android:launchMode="singleTop"
            android:theme="@style/Theme.App.Starting"
            android:windowSoftInputMode="adjustResize">
class MainActivity : FlutterFragmentActivity() {

    private var methodChannelResult: MethodChannel.Result? = null

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(
            flutterEngine.dartExecutor.binaryMessenger,
            CHANNEL
        ).setMethodCallHandler { call, result ->
            this.methodChannelResult = result
        }
    }
}

这个设置实际上已经很长一段时间没有动过,但这个版本似乎除了扩展标记为

NoTitleBar
的主题之外还想要其他东西。

截图:

The ToolBar in question

我尝试了什么?

  1. 在我的
    styles.xml
    values-night/styles.xml
    中包括以下内容:
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>

很多答案都建议全屏,但这不仅行不通,而且还行不通。我不想为了追求期望的结果而隐藏状态栏。我在

LaunchTheme
NormalTheme
Theme.App.Starting
上完整和部分地尝试了上述内容。

  1. 将以下代码添加到
    MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    this.window.requestFeature(Window.FEATURE_NO_TITLE)
}

这感觉有点矫枉过正(如果您无论如何都必须在代码中进行调用,那么 XML 主题又是为了什么?)并且它会抛出一个错误,说明在添加内容之前必须调用

requestFeature()
(我实际调用的方法)。

我很想知道:

  • 为什么会发生这种情况
  • 我需要进行哪些更改才能删除工具栏

如果此更改已记录在某处,而我只是一个假人,请随意投反对票

android flutter android-theme
1个回答
0
投票

解决此问题的方法是在我的 AndroidManifest.xml 中显式引用正常主题:


<application
    android:allowBackup="false"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    tools:replace="android:supportsRtl">

    <meta-data
        android:name="io.flutter.embedding.android.NormalTheme"
        android:resource="@style/NormalTheme" />

    <!-- Rest of your Manifest's application stuff-->
</application>

默认情况下,新项目会发生这种情况,我的应用程序的新构建风格已经具备此功能就证明了这一点。

这里有一个迁移指南提到了这一点:

https://github.com/flutter/flutter/blob/master/docs/platforms/android/Upgrading-pre-1.12-Android-projects.md

© www.soinside.com 2019 - 2024. All rights reserved.