【发布时间】:2015-09-20 00:25:15
【问题描述】:
我最近在我的项目中包含了 appcompat v7 库。为了摆脱一堆错误,我更新了我的大部分 SDK 文件,并将我的目标 SDK 版本从 21 更改为 23。问题是,我现在设计导航抽屉切换(汉堡符号/箭头符号)的旧代码不起作用并通过eclipse在文件上抛出并显示错误。
代码如下:
<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">false</item>
<item name="barSize">16sp</item>
<item name="gapBetweenBars">4sp</item>
<item name="color">@android:color/white</item>
</style>
这是它在我的自定义主题中的实现:
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
Eclipse 错误读取:未找到与给定名称匹配的资源:attr "barSize"。
当我将其注释掉时,应用程序运行但崩溃并显示错误日志:
09-20 01:09:39.852: E/AndroidRuntime(1662): FATAL EXCEPTION: main
09-20 01:09:39.852: E/AndroidRuntime(1662): Process: com.site.app, PID: 1662
09-20 01:09:39.852: E/AndroidRuntime(1662): java.lang.NoSuchMethodError: No static method getLayoutDirection(Landroid/graphics/drawable/Drawable;)I in class Landroid/support/v4/graphics/drawable/DrawableCompat; or its super classes (declaration of 'android.support.v4.graphics.drawable.DrawableCompat' appears in /data/app/com.site.app-2/base.apk)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.support.v7.graphics.drawable.DrawerArrowDrawable.draw(DrawerArrowDrawable.java:337)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.widget.ImageView.onDraw(ImageView.java:1209)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.view.View.draw(View.java:15210)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.view.View.updateDisplayListIfDirty(View.java:14144)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.view.View.getDisplayList(View.java:14167)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.view.View.draw(View.java:14934)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.view.ViewGroup.drawChild(ViewGroup.java:3410)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3204)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.view.View.updateDisplayListIfDirty(View.java:14139)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.view.View.getDisplayList(View.java:14167)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.view.View.draw(View.java:14934)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.view.ViewGroup.drawChild(ViewGroup.java:3410)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3204)
09-20 01:09:39.852: E/AndroidRuntime(1662): at android.view.View.draw(View.java:15213)
...
当我使用 API 21 编译时,同样的代码可以工作。关于如何使用 API 23 设置 Drawer Toggle Arrow 样式的任何想法?
【问题讨论】:
-
您是否将 support-v4 升级到与 AppCompat-v7 相同的版本?
-
@BladeCoder 我在导入 AppCompat-v7 库之前通过 SDK 更新了 Android 支持库,尽管我仍然必须将 project.properties 目标从 20-23 更改。我还需要单独更新 v4 库吗?我该怎么做?
-
如果您在项目中直接包含了 support-v4 jar,则需要将其删除。 AppCompat-v7 库项目提供的版本应该没问题。不过如果你使用 Android Studio 会更容易。
-
崩溃日志表明 support-v4 类中缺少一些必需的方法,这表明您使用的是过时版本的 support-v4 和最新版本的 AppCompat-v7。在 support-v4 版本 23 中添加了 DrawableCompat.getLayoutDirection()。
-
@BladeCoder 嗯...实际上我的项目中也包含了 android_support_v13,它还包含一个 v4 库。所以可能就是这样。我想下载最新版本的 v13 可能会奏效。
标签: android android-navigation android-6.0-marshmallow navigation-drawer