為何出現此錯誤訊息?The application should not provide its own launch screen

 如果你在 Android Studio 遇到錯誤訊息:

"The application should not provide its own launch screen"

這通常發生在 Flutter 開發環境,而且與 flutter_native_splash 套件或 AndroidManifest.xml 設定有關。以下是可能的原因及解決方案:


🚨 可能原因與解決方案

1. flutter_native_splash 設定錯誤

在 Flutter 開發中,預設的啟動畫面(Splash Screen)應該由 Android 系統的 theme 機制 來處理,而不是手動加載一個 Activity。如果你的 flutter_native_splash 設定不正確,可能會導致這個錯誤。

解決方案

  1. 檢查 pubspec.yamlflutter_native_splash 設定

    • 確保 android: true 沒有被設為 false
    • 檢查 background_imagecolor 設定是否正確
    yaml
    flutter_native_splash: android: true ios: true web: false color: "#FFFFFF" image: assets/splash.png
  2. 重新產生啟動畫面 在終端機執行:

    sh
    flutter clean flutter pub get dart run flutter_native_splash:create
  3. 刪除 android/app/src/main/res/drawable/launch_background.xml(如果存在)並重新生成 Splash Screen。


2. AndroidManifest.xml 設定不當

有些開發者會試圖在 AndroidManifest.xml 手動新增 一個 SplashActivity,這會導致系統無法自動加載正確的 launchTheme,進而出錯。

解決方案

  • 打開 android/app/src/main/AndroidManifest.xml

  • 檢查 android:theme 是否設為 Theme.Splash,例如:

    xml
    <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" <!-- 這個應該是 `LaunchTheme` --> android:exported="true">
  • 確保 沒有額外的 SplashActivity,如果有,請刪除:

    xml
    <activity android:name=".SplashActivity">

3. styles.xml 設定錯誤

Flutter 在 Android 上的啟動畫面是透過 styles.xml 定義的,請確保你的 styles.xml 沒有錯誤。

解決方案

  1. 打開 android/app/src/main/res/values/styles.xml

  2. 檢查 LaunchTheme 是否正確

    xml
    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar"> <item name="android:windowBackground">@drawable/launch_background</item> </style>
  3. 檢查 themes.xml 是否有重複定義 如果 themes.xml 內有其他 Theme,可能會造成衝突,請確保:

    • Theme.AppCompat.Light.NoActionBar 沒有影響 LaunchTheme
    • 不要使用 Theme.MaterialComponents.DayNight 作為啟動畫面主題

4. MainActivity.kt 設定錯誤

如果你手動修改了 MainActivity.kt,可能會導致 Flutter 的 Splash Screen 機制衝突

解決方案

  1. 打開 android/app/src/main/kotlin/com/example/yourapp/MainActivity.kt
  2. 檢查是否有 SplashActivity,如果有,刪除相關程式碼:
    kotlin
    class SplashActivity : FlutterActivity() {
    MainActivity 應該是這樣:
    kotlin
    package com.example.yourapp import io.flutter.embedding.android.FlutterActivity class MainActivity: FlutterActivity() { }

🔥 總結

最佳解法

  1. 確保 flutter_native_splash 設定正確,執行 flutter pub run flutter_native_splash:create
  2. 刪除 android/app/src/main/res/drawable/launch_background.xml
  3. 確保 AndroidManifest.xml 沒有額外的 SplashActivity
  4. 確保 styles.xmlLaunchTheme 設定正確
  5. 確保 MainActivity.kt 沒有多餘的 Splash 相關程式碼

EXCEL 比對資料後,如果只有四位數,就轉換成數值。不是四位數就不改,要如何修改?

 你可以使用 LEN(A2) 來判斷 A2 是否為四位數,並在滿足條件時轉換為數值,否則保持原樣:

excel
=IF(COUNTIF($A$2:A2, A2) = 1, IF(AND(LEN(A2) = 4, ISNUMBER(A2 + 0)), A2 + 0, A2), "")

公式解釋:

  1. COUNTIF($A$2:A2, A2) = 1

    • 檢查 A2 是否是第一次出現,若是,則繼續執行;否則返回 ""(空白)。
  2. AND(LEN(A2) = 4, ISNUMBER(A2 + 0))

    • LEN(A2) = 4:檢查 A2 是否為 4 個字符(無論是純數字還是數字格式的文字)。
    • ISNUMBER(A2 + 0):嘗試將 A2 加 0,這樣能檢查 A2 是否能轉換為數值(數字格式的文字也可以轉換)。
  3. A2 + 0

    • A2 是四位數,則加 0 轉換為數值。
    • A2 不是四位數,則保持原值不變(即保留文字格式)。

運作方式:

A 列值結果
12341234(數值)
"5678"5678(數值)
12"12"(文字)
"abcd""abcd"(文字)
12345"12345"(文字)

這樣就能確保: ✅ 四位數字轉換為數值
非四位數的數字或文字保持不變
重複值不顯示

excel公式可將重覆值只顯示一次,但有些數字是像6666x1,但我只要前四個數字,我該如何設定公式?

 如果你的數據有像 6666x1 這樣的格式,而你只想要前四個數字(例如 6666),你可以使用 LEFT 函數來取前四個字元:

excel
=LEFT(B32, 4)

如果你還需要確保這四個字元是數字(避免 x1 影響),可以搭配 VALUE 轉換數值:

excel
=IF(ISNUMBER(VALUE(LEFT(B32, 4))), VALUE(LEFT(B32, 4)), LEFT(B32, 4))

這樣的公式會:

  1. B32 的前四個字元。
  2. 檢查這四個字元是否為數字:
    • 若為數字,則轉換為數值型態。
    • 若非純數字,則維持字串格式。

這樣就能確保只取得前四碼的數值部分,而不受後面的 x1 影響。

excel 最大值用max,取最小值但要排除0,要怎麼寫?

 =MIN(IF(A1:A10<>0, A1:A10))