更新到 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 到最新版本? [复制]