【发布时间】:2018-05-21 23:35:35
【问题描述】:
编辑:我已更新到最新的 Android 支持库,但仍然收到错误消息。
我知道这个问题是多余的,我已经研究了关于 SO 的所有问题,但我仍然无法确定为什么我的 FAB 没有在 API 19 上呈现。我知道 API 21 发生了相当大的变化,并且解决了向后兼容性问题与 AppCompat 库。我也了解所需的关键变化正在发生变化
android:backgroundTint="@color/actionRed"
到
app:backgroundTint="@color/actionRed"
我已经做到了。
这可能与我的主题有关,因为我仍在学习 Android 主题和材料设计的基础知识。以下是描述我的库、XML 和我收到的错误的所有相关代码:
Manifest(我之前用的是NoActionBar主题,试过改成Theme.AppCompat):
<application
android:name="android.support.multidex.MultiDexApplication"
android:allowBackup="true"
android:icon="@drawable/xxxxxxxx"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat">
XML:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.FloatingActionButton
android:visibility="visible"
android:id="@+id/myFAB"
android:clickable="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:backgroundTint="@color/actionRed"
android:layout_gravity="bottom|end"
android:layout_marginEnd="6dp"
android:layout_marginRight="6dp"
android:layout_marginBottom="6dp"
app:srcCompat="@drawable/ic_add_white_24dp"
app:elevation="4dp"
/>
应用级 Gradle:
android {
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
vectorDrawables.useSupportLibrary = true
applicationId "xxxxxxxxxxxx"
minSdkVersion 16
targetSdkVersion 26
versionCode 1
versionName "1.0"
multiDexEnabled true
}
// Support library
compile "com.android.support:design:$supportLibVersion"
compile "com.android.support:cardview-v7:$supportLibVersion"
compile "com.android.support:support-v4:$supportLibVersion"
compile "com.android.support:appcompat-v7:$supportLibVersion"
根 Gradle:
ext {
supportLibVersion = "27.0.2"
playServicesVersion = "11.4.2"
}
可绘制(是因为我使用的是自己的 FAB 图像吗?我想要带有白色“+”号的红色按钮):
错误:
1:28.981 3807-3807/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: xxxxxxxxxxxxx, PID: 3807
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.troychuinard.fanpolls/com.troychuinard.fanpolls.HomeActivity}: android.view.InflateException: Binary XML file line #13: Error inflating class android.support.design.widget.FloatingActionButton
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class android.support.design.widget.FloatingActionButton
at android.view.LayoutInflater.createView(LayoutInflater.java:620)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
at com.troychuinard.fanpolls.HomeActivity.onCreate(HomeActivity.java:66)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
at com.troychuinard.fanpolls.HomeActivity.onCreate(HomeActivity.java:66)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoSuchMethodError: android.support.v4.content.res.ConfigurationHelper.getScreenWidthDp
at android.support.design.widget.FloatingActionButton.getSizeDimension(FloatingActionButton.java:442)
at android.support.design.widget.FloatingActionButton.getSizeDimension(FloatingActionButton.java:434)
at android.support.design.widget.FloatingActionButton$ShadowDelegateImpl.getRadius(FloatingActionButton.java:819)
at android.support.design.widget.FloatingActionButtonGingerbread.setBackgroundDrawable(FloatingActionButtonGingerbread.java:92)
at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:181)
at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:153)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:594)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
at com.troychuinard.fanpolls.HomeActivity.onCreate(HomeActivity.java:66)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at
dalvik.system.NativeStart.main(Native Method)
12-06 23:41:28.981 569-870/? W/ActivityManager: Force finishing
activity xxxxxxxxxxxx/.HomeActivity
我们将不胜感激任何有关材料设计、AppCompat、向后兼容性或任何相关建议的帮助、资源。
【问题讨论】:
-
您在支持库上落后了几个主要版本,我相信有与背景色调相关的错误修复
-
谢谢,我会更新支持库并从那里获取
-
我使用自己的drawable有问题吗?我假设我也应该使用内置的 Android drawable。
-
你可以在按钮中使用任何你想要的图像
-
我还建议使用支持 lib 版本 26.1.0 来匹配您的编译 sdk 版本。
标签: java android xml api material-design