更新到 sdk 版本 23 后,我的应用程序因一些浮动操作按钮错误而崩溃?

Posted

技术标签:

【中文标题】更新到 sdk 版本 23 后,我的应用程序因一些浮动操作按钮错误而崩溃?【英文标题】:After updating to sdk version 23 my app crashes with some floating action button error? 【发布时间】:2020-03-03 00:53:07 【问题描述】:

我已将 compile sdk 版本更新为 23,这让我看到了与浮动操作按钮相关的错误列表。无法修复它,任何帮助高度赞赏。

2019-11-06 15:11:26.767 2777-2777/? E/androidRuntime: 致命异常: main 进程:xyz,PID:2777 java.lang.RuntimeException:无法启动活动 ComponentInfoxz.MediaPresentationActivity:android.view.InflateException:二进制 XML 文件第 86 行:二进制 XML 文件第 86 行:膨胀类 android.support.design.widget.FloatingActionButton 时出错 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3125) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3268) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1959) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:7100) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964) 引起:android.view.InflateException:二进制 XML 文件第 86 行:二进制 XML 文件第 86 行:错误膨胀类 android.support.design.widget.FloatingActionButton 引起:android.view.InflateException:二进制 XML 文件第 86 行:错误膨胀类 android.support.design.widget.FloatingActionButton 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Constructor.newInstance0(本机方法) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:343) 在 android.view.LayoutInflater.createView(LayoutInflater.java:686) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:829) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:902) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:863) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:554) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:461) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:383) 在 com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:469) 在 android.app.Activity.setContentView(Activity.java:2858) 在 com.syz.MediaPresentationActivity.onCreate(MediaPresentationActivity.java:1089) 在 android.app.Activity.performCreate(Activity.java:7327) 在 android.app.Activity.performCreate(Activity.java:7318) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1275) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3105) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3268) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1959) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:7100) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964) 原因:java.lang.IllegalArgumentException:您需要将 Theme.AppCompat 主题(或后代)与设计库一起使用。


build.gradle

apply plugin: 'com.android.application'

android 

   compileSdkVersion 23
    defaultConfig 
        applicationId "com.xyz"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode timeCounter
        versionName "$version"
    
    
    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    


dependencies 
    implementation 'com.google.android.gms:play-services-appindexing:8.1.0'
    implementation 'com.android.support:design:23.2.1'
    implementation 'com.android.support:appcompat-v7:23.1.1'


-清单..

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xyz.e">
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CONFIGURE_SIP" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>

<!-- Declares necessary features for the app to work -->


    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

        <activity
            android:name=".FullscreenActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/app_name"
            android:launchMode="singleInstance"
            android:theme="@style/FullscreenTheme">
            <!--
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.HOME" />
               <category android:name="android.intent.category.DEFAULT" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
           -->
        </activity>

        <activity
            android:name=".MediaPresentationActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="eFrame"
            android:launchMode="singleInstance"
            android:screenOrientation="landscape"
            >

        </activity>

       <activity
            android:name=".SettingsActivity"
            android:label="@string/title_activity_settings"
            android:parentActivityName=".SettingsActivity"
            android:theme="@android:style/Theme.DeviceDefault">
            <meta-data android:name="android.support.PARENT_ACTIVITY android:value="com.serv24.eframe.SettingsActivity" />
        </activity>

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        <receiver android:name=".IncomingReceiver" android:label="Call Receiver"/>

</application>

</manifest>

【问题讨论】:

您的项目中是否存在shadow_mid_color 颜色? 抱歉我已经更新了我的问题,阴影不是问题,但是我的应用程序在更新到版本 23 时崩溃并出现上述错误, 您需要使用 Theme.AppCompat 主题。您使用的是哪个应用主题? 你能看看我的清单吗,我用的是 DeviceDefault 主题 在您的 MediaPresentationActivity 中,您使用的是@style/AppTheme 【参考方案1】:

我建议使用 AndroidX 而不是旧的支持库,因为它可以确保在整个库和 api 级别中具有更好的兼容性。

首先,将以下内容添加到您的 build.gradle

 implementation 'androidx.legacy:legacy-support-v4:1.0.0'

还可以使用助手: 重构 > 迁移到 AndroidX

一开始可能会出现一些错误,但应该通过将 com.android 等替换为 androidx 来修复它们,这里有很多关于该主题的帖子。

您也可以尝试在 xml 中使用 this 直接寻址 Button:

android.support.design.widget.FloatingActionButton

希望这会有所帮助 :) 祝你好运!

【讨论】:

以上是关于更新到 sdk 版本 23 后,我的应用程序因一些浮动操作按钮错误而崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 在更新 SDK 版本 23 后添加至少一个带有 ACTION-VIEW 意图过滤器的 Activity

支持Android Wear的APK必须至少具有至少23的SDK版本

Android 应用程序在 SDK-tools 更新版本后崩溃(NoClassDefFound,工具版本 22)

此 Android SDK 需要 ADT 版本 23.0.0 或更高版本。当前版本是 22.6。请更新 ADT 到最新版本? [复制]

将目标 sdk 版本更新为 30 后,OkHttpProfilerInterceptor 不起作用

Android sdk23 找地方更新和请求权限