笔者在做一个项目时使用了AS自带模板下的BottomNavigationView功能,前期程序打开一直没有问题,在换用Android6.0及以下版本手机时,总是程序一打开就意外停止运行,换用Android7.0以上手机均无此现象,AS反馈的信息是出错在了MainActivity里的:
setContentView(R.layout.activity_on_running);
进行代码的逐行调试后发现在读取到BottomNavigationView里的menu后返回了错误id,程序终止运行:
app:menu="@menu/bottom_nav_menu"
在此,将原始bottom_nav_menu代码放在下方:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/navigation_home"
android:icon="@drawable/home"
android:title="@string/title_home" />
<item
android:id="@+id/navigation_plan"
android:icon="@drawable/plan"
android:title="@string/title_plan" />
<item
android:id="@+id/navigation_data"
android:icon="@drawable/data"
android:title="@string/title_data" />
<item
android:id="@+id/navigation_user"
android:icon="@drawable/personal"
android:title="@string/title_user" />
</menu>
直接来看并没有什么问题,并且每项数据都在 ,未调用错误,最后,经多次尝试后发现是icon使用了png图片,并非xml导致的。安卓开发会经常遇到png图片无法加载的错误,针对该问题AS里指定的"android:icon:"数据对象是xml或png,但在Android6.0以下版本,png图片并不能直接作为BottomNavigationView的icon使用,一些新手可能不会编写icon的xml文件,在此笔者提供一种方法:
1.首先从网站上下载对应图标的SVG格式:
网站有很多,例如iconfont、甚至WPS,然后保存成SVG格式,记住所保存的目录。
2.使用Android Studio进行转化:
点击File->new->Vector Asset,选择之前保存的图片:
更改名称和Size,Size大小一般为24dp×24dp,最后点next,选择保存目录,即可自动生成一个xml文件。