- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个使用 android 支持库版本 23.2.1
的 android 应用程序,一切正常。但是,我昨天将 android 支持库版本更新为 25.2.0
并意识到一些用户遇到了这个异常(通过 Fabric crashlytics),但我无法重现它。
这是崩溃日志:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference
at android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.java:959)
at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:1007)
at android.graphics.drawable.LayerDrawable.createConstantState(LayerDrawable.java:133)
at android.graphics.drawable.LayerDrawable.<init>(LayerDrawable.java:126)
at android.graphics.drawable.LayerDrawable$LayerState.newDrawable(LayerDrawable.java:1048)
at android.content.res.Resources.getCachedDrawableLocked(Resources.java:2777)
at android.content.res.Resources.getCachedDrawable(Resources.java:2745)
at android.content.res.Resources.loadDrawable(Resources.java:2586)
at android.content.res.Resources.getDrawable(Resources.java:900)
at android.content.Context.getDrawable(Context.java:408)
at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:30)
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:372)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:202)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:190)
at android.support.v7.content.res.AppCompatResources.getDrawable(AppCompatResources.java:100)
at android.support.v7.view.menu.MenuItemImpl.getIcon(MenuItemImpl.java:425)
at android.support.v7.view.menu.ActionMenuItemView.initialize(ActionMenuItemView.java:129)
at android.support.v7.widget.ActionMenuPresenter.bindItemView(ActionMenuPresenter.java:211)
at android.support.v7.view.menu.BaseMenuPresenter.getItemView(BaseMenuPresenter.java:186)
at android.support.v7.widget.ActionMenuPresenter.getItemView(ActionMenuPresenter.java:197)
at android.support.v7.widget.ActionMenuPresenter.flagActionItems(ActionMenuPresenter.java:479)
at android.support.v7.view.menu.MenuBuilder.flagActionItems(MenuBuilder.java:1160)
at android.support.v7.view.menu.BaseMenuPresenter.updateMenuView(BaseMenuPresenter.java:95)
at android.support.v7.widget.ActionMenuPresenter.updateMenuView(ActionMenuPresenter.java:234)
at android.support.v7.view.menu.MenuBuilder.dispatchPresenterUpdate(MenuBuilder.java:292)
at android.support.v7.view.menu.MenuBuilder.onItemsChanged(MenuBuilder.java:1047)
at android.support.v7.view.menu.MenuBuilder.startDispatchingItemsChanged(MenuBuilder.java:1074)
at android.support.v7.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:460)
at android.support.v7.app.ToolbarActionBar$1.run(ToolbarActionBar.java:61)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5637)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
这似乎与菜单 View 有关。菜单选项的布局是:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".tablet.ui.navimenu.ContainerActivity">
<item
android:id="@+id/memo_fragment"
android:icon="@drawable/ic_class_white_24dp"
android:orderInCategory="100"
android:title="@string/memo_fragment"
app:showAsAction="always" />
<item
android:id="@+id/notification_fragment"
android:icon="@drawable/layerlist_menu_notification"
android:orderInCategory="200"
android:title="@string/notification_fragment"
app:showAsAction="always" />
</menu>
layerlist_menu_notification 布局是一个带有徽章的图标:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/ic_notification"
android:drawable="@drawable/ic_notifications_white_24dp"
android:gravity="center" />
<!-- set a place holder Drawable so android:drawable isn't null -->
<item
android:id="@+id/ic_badge"
android:drawable="@drawable/ic_notifications_white_24dp" />
</layer-list>
知道哪里出了问题吗?
最佳答案
尝试在 build.gradle 中更改以下内容
compileSdkVersion 25
buildToolsVersion "25.0.2"
compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.android.support:design:25.1.0'
compile 'com.android.support:support-v4:25.1.0'
关于android - LayerDrawable 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43447257/
我需要将 20 多张图像叠加在一起以形成一个交互式 map ,其中每一层都可以打开和关闭。 我决定为此使用 LayerDrawable,但我不断收到 OutOfMemoryError。即使在我将 La
如何从 LayerDrawable 中删除图层? addLayer 可用于添加层,但我没有看到可用于删除层的函数。 https://developer.android.com/reference/an
您好,我正在尝试绘制两个不同大小的图标,其中一个图标只是背景边框类型,另一个图标是符号。 当我绘制两者时,符号图标的大小会调整得更大,以适应与背景图标相同的大小。 这是我的代码 drawableS
因为我的应用程序的颜色主题是动态的,所以我只能使用颜色和形状绘制来创建背景绘制,我想构建一个可绘制的带有颜色和形状的 edittext 背景,如下所示。但我想以编程方式执行此操作 如何以编程方式构建相
我有一个使用 android 支持库版本 23.2.1 的 android 应用程序,一切正常。但是,我昨天将 android 支持库版本更新为 25.2.0 并意识到一些用户遇到了这个异常(通过 F
您好,我正在开发一个 Android 启动器,它的所有应用程序图标后面都有一个圆形背景。我正在使用 LayerDrawable 来使其工作,但是圆形图像比应用程序图标小,请参见此处: 所以我的问题是如
如何以编程方式创建此可绘制对象? 最佳答案 在我阅读@OctavianDamiean 的回答下的评论之前,这并不是很明显。他的超链接已损坏,但为了以编程方式设置 it
我正在使用适用于 Android 的通用图像加载器(这里是 link) 我需要从 URL 加载图像并将其覆盖到另一个图像。默认情况下图书馆不能这样做,所以我试着改变它。问题是现在我需要将 LayerD
我想在操作栏中添加徽章计数器并使其可点击 getMenuInflater().inflate(R.menu.main_menu, menu); MenuItem item = menu
错误: java.lang.OutOfMemoryError at android.graphics.Bitmap.nativeCreate(Native Method) at android.gra
我正在构建一个带有某种罗盘的应用程序,我想使用 LayerDrawable 来绘制罗盘并为其设置动画。 LayerDrawable 由用于罗盘背景的静态背景图像和用于旋转部分的 RotateDrawa
我现在在 kotlin 上重写我的旧 java 代码,我有一个问题,我需要这段代码的 kotlin 模拟: Drawable[] layers = new Drawable[]{ colorD
我已经通过代码定义了一个包含一些项目的 LayerDrawable,但我不知道如何设置“imagen”所具有的 LayerDrawable 中每个图层的可见性。这是我的代码: 公共(public)类
我有一个 LayerDrawable,我用一个包含 5 个 Drawable 的 Drawable 数组构造它。现在假设在运行时我想添加另一个 Drawable 到我的 LayerDrawable,以
我使用的是支持库的最新版本 22.1.1。 我以前是这样的: mRatingBar = (RatingBar) getActivity().findViewById(R.id.rating); Lay
我正在使用 LayerDrawable 将小点位图(“热点”)动态放置在大位图图像上。索引 0 处的图层包含大图像。图像上的点位置是根据大图像的百分比向我指定的。例如,我可能有一个热点,它应该距离大型
我正在尝试在 xml 中构建一个 LayerDrawable,其中上层有时会完全遮盖下层。为了使下层更小,我使用 InsetDrawable 包裹另一个可绘制对象,使其小于 View 的完整尺寸。然而
我想在 LayerDrawable 中使用两个 9-patch 似乎只有
我在 layer-list 中有两个可旋转的可绘制对象,我试图将它们都设置为按钮上的 drawableleft 动画。我正在显示可绘制对象但没有动画。 这是我在 xml 中的可绘制布局(button_
在我的应用程序中,我使用 LayerDrawable 显示覆盖层图像。我这样做是成功使用layerDrawable。 在我将 layerDrawable 设置为 imageView.setImageD
我是一名优秀的程序员,十分优秀!