Android 工具栏崩溃问题 - 并非所有设备

Ed *_*ner 1 java android toolbar

我遇到了一个奇怪的问题。我有一个应用程序在一堆设备上运行,但在其中一个设备上失败了,出现了一些看似简单但我无法弄清楚的问题。

\n

工具栏在我的所有设备上工作正常 - 但导致此错误:

\n
\n

不要在主题中请求 Window.FEATURE_SUPPORT_ACTION_BAR 并将 windowActionBar 设置为 false 以使用工具栏。

\n
\n

活动_main.xml:

\n
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\nxmlns:app="http://schemas.android.com/apk/res-auto"\nxmlns:tools="http://schemas.android.com/tools"\nandroid:layout_width="match_parent"\nandroid:layout_height="match_parent"\ntools:context=".MainActivity">\n\n<com.google.android.material.appbar.AppBarLayout\n    android:id="@+id/appBarLayout"\n    android:layout_width="match_parent"\n    android:layout_height="wrap_content"\n    android:theme="@style/AppTheme.AppBarOverlay"\n    app:layout_constraintEnd_toEndOf="parent"\n    app:layout_constraintStart_toStartOf="parent"\n    app:layout_constraintTop_toTopOf="parent">\n\n    <androidx.appcompat.widget.Toolbar\n        android:id="@+id/toolbar"\n        android:layout_width="match_parent"\n        android:layout_height="?attr/actionBarSize"\n        android:background="@color/header_color"\n        app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" />\n\n</com.google.android.material.appbar.AppBarLayout>\n
Run Code Online (Sandbox Code Playgroud)\n

主题.xml:

\n
<resources xmlns:tools="http://schemas.android.com/tools">\n<!-- Base application theme. -->\n<style name="Theme.TestApp" parent="Theme.MaterialComponents.DayNight.Bridge">\n    <!-- Primary brand color. -->\n    <item name="colorPrimary">@color/purple_500</item>\n    <item name="colorPrimaryVariant">@color/purple_700</item>\n    <item name="colorOnPrimary">@color/white</item>\n    <!-- Secondary brand color. -->\n    <item name="colorSecondary">@color/teal_200</item>\n    <item name="colorSecondaryVariant">@color/teal_700</item>\n    <item name="colorOnSecondary">@color/black</item>\n    <!-- Status bar color. -->\n    <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>\n    <!-- Customize your theme here. -->\n    <item name="windowActionBar">false</item>\n    <item name="windowNoTitle">true</item>\n</style>\n\n<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" >\n    <item name="android:background">@color/header_color</item>\n</style>\n
Run Code Online (Sandbox Code Playgroud)\n

显现:

\n
<activity\n        android:name=".MainActivity"\n        android:theme="@style/Theme.TestApp">\n    </activity>\n
Run Code Online (Sandbox Code Playgroud)\n

主要活动

\n
    protected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    setContentView(R.layout.activity_main);\n    Toolbar toolbar = findViewById(R.id.toolbar);\n    setSupportActionBar(toolbar);\n
Run Code Online (Sandbox Code Playgroud)\n

日志猫错误:

\n
\n

2021-02-14 14:04:37.574 13026-13026/com.edtest.devicetools E/AndroidRuntime: 致命异常: main\n进程: com.edtest.devicetools, PID: 13026\njava.lang.RuntimeException: 无法启动活动ComponentInfo{com.edtest.devicetools/com.edtest.devicetools.MainActivity}:java.lang.IllegalStateException:此 Activity 已具有由窗口装饰提供的操作栏。不要在主题中请求 Window.FEATURE_SUPPORT_ACTION_BAR 并将 windowActionBar 设置为 false 以使用工具栏。\nat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3762)\nat android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:第3938章TransactionExecutor.java:95)\nat android.app.ActivityThread$H.handleMessage(ActivityThread.java:2277)\nat android.os.Handler.dispatchMessage(Handler.java:106)\nat android.os.Looper.loop( Looper.java:246)\nat android.app.ActivityThread.main(ActivityThread.java:8425)\nat java.lang.reflect.Method.invoke(本机方法)\nat com.android.internal.os.RuntimeInit$MethodAndArgsCaller .run(RuntimeInit.java:596)\nat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)\n原因:java.lang.IllegalStateException:此 Activity 已具有窗口提供的操作栏装饰风格。不要在主题中请求 Window.FEATURE_SUPPORT_ACTION_BAR 并将 windowActionBar 设置为 false 以使用工具栏。\nat androidx.appcompat.app.AppCompatDelegateImpl.setSupportActionBar(AppCompatDelegateImpl.java:572)\nat androidx.appcompat.app.AppCompatActivity.setSupportActionBar( AppCompatActivity.java:159)\nat com.edtest.devicetools.MainActivity.onCreate(MainActivity.java:54)\nat android.app.Activity.performCreate(Activity.java:8183)\nat android.app.Activity.performCreate( Activity.java:8167)\nat android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)\nat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3735)\nat android.app.ActivityThread.handleLaunchActivity(ActivityThread. java:3938)\xc2\xa0\nat android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)\xc2\xa0\nat android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)\xc2 \xa0\nat android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)\xc2\xa0\nat android.app.ActivityThread$H.handleMessage(ActivityThread.java:2277)\xc2\xa0\nat android. os.Handler.dispatchMessage(Handler.java:106)\xc2\xa0\nat android.os.Looper.loop(Looper.java:246)\xc2\xa0\nat android.app.ActivityThread.main(ActivityThread.java:第8425章 8425 xa0\nat com.android.internal.os。ZygoteInit.main(ZygoteInit.java:1130)\xc2\xa0\n2021-02-14 14:04:37.600 13026-13026/com.edtest.devicetools I/Process: 发送信号。PID:13026 SIG:9

\n
\n

在某些设备上,应用程序每次都会在 setSupportActionBar 上崩溃,但在其他设备上则不会。所有设备都运行 Android 10,因此操作系统没有差异。

\n

我已阅读有关工具栏的所有文章\n我尝试了带或不带操作栏的父主题的各种组合\n我可以保留或删除主题 windowactionbar 和 windownotitle 语句,并且无论如何似乎都有相同的结果。

\n

有什么想法吗?

\n

谢谢!

\n

Ed *_*ner 5

好的 - 我知道发生了什么事。令人沮丧的是我错过了这个——弄清楚其中的一些东西真是太疯狂了。

由于某种原因,主题让我感到困惑 - 但这是我稍后要弄清楚的。

这是出了问题的地方:

新的Android Studio项目有themes.xml并且还包括另一个themes.xml(夜间)

我已将所有应用程序栏样式添加到 theme.xml 中 - 但我没有对此文件的(夜间)版本执行任何操作。

我遇到错误的设备在 Android 设置中设置为深色模式。

因此该应用程序尝试使用备用主题.xml 但失败了。

因此,如果您还没有准备好在应用程序中使用任何双重人格,要么杀死该文件,要么拥抱它并支持黑暗模式

不管怎样 - 这是我的问题。