即使bottom_navigation.xml是正确的,当对Bottom Navigation View进行膨胀时也会出错

时间:2019-09-28 15:35:41

标签: android xml android-studio bottomnavigationview

即使我的 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_user); BottomNavigationView bottomNavigationView = findViewById(R.id.bot_nav); bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { int id = menuItem.getItemId(); if (id== R.id.nav_home){ } if (id== R.id.nav_account){ } if (id== R.id.nav_search){ } if (id== R.id.nav_settings){ } return true; } }); bottomNavigationView.setSelectedItemId(R.id.nav_home); } } 是正确的,我仍然收到此错误。我不知道是不是图标。

这是我的MainActivity.java。我输入了所有需要的内容。

app:menu="@menu/bottom_navigation"

这是我的activity_main_user.xml。每当我删除 <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bot_nav" android:layout_width="match_parent" android:layout_height="70dp" android:layout_alignParentBottom="true" android:background="#B9B9B9" android:backgroundTint="#1B000000" android:clipChildren="false" app:itemHorizontalTranslationEnabled="false" app:itemTextColor="#000000" app:menu="@menu/bottom_navigation" /> 时,Logcat中都不会显示错误。

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:id="@+id/nav_home"
            android:icon="@mipmap/homeicon_ec"
            android:title="Home" />
        <item
            android:id="@+id/nav_search"
            android:icon="@mipmap/search_bottom_nav"
            android:title="Search" />
        <item
            android:id="@+id/nav_account"
            android:icon="@mipmap/ec_userlogo_bottom_nav_03"
            android:title="My Account" />
        <item
            android:id="@+id/nav_settings"
            android:icon="@mipmap/settings_bottom_nav"
            android:title="Settings" />
    </menu>

这是我的bottom_navigator.xml

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.robihid.ecommerce.hci502/com.robihid.ecommerce.hci502.MainActivity}: android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988)
            at android.app.ActivityThread.-wrap14(ActivityThread.java)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:154)
            at android.app.ActivityThread.main(ActivityThread.java:6682)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
         Caused by: android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView
         Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView
         Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Constructor.newInstance0(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
            at android.view.LayoutInflater.createView(LayoutInflater.java:652)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:865)
            at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:525)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:378)
            at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
            at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
            at com.robihid.ecommerce.hci502.MainActivity.onCreate(MainActivity.java:22)
            at android.app.Activity.performCreate(Activity.java:6942)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2880)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988)
            at android.app.ActivityThread.-wrap14(ActivityThread.java)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:154)
            at android.app.ActivityThread.main(ActivityThread.java:6682)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
         Caused by: java.lang.OutOfMemoryError: Failed to allocate a 10015740 byte allocation with 7465824 free bytes and 7MB until OOM
            at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
            at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
            at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:700)
            at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:535)
            at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1179)
            at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:770)
            at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:621)
            at android.content.res.Resources.getDrawable(Resources.java:1640)
            at android.content.Context.getDrawable(Context.java:525)
    2019-09-28 23:07:18.783 23055-23055/com.robihid.ecommerce.hci502 E/AndroidRuntime:     at androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:454)
            at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:144)
            at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:132)
            at androidx.appcompat.content.res.AppCompatResources.getDrawable(AppCompatResources.java:104)
            at androidx.appcompat.view.menu.MenuItemImpl.getIcon(MenuItemImpl.java:505)
            at com.google.android.material.bottomnavigation.BottomNavigationItemView.initialize(BottomNavigationItemView.java:105)
            at com.google.android.material.bottomnavigation.BottomNavigationMenuView.buildMenuView(BottomNavigationMenuView.java:523)
            at com.google.android.material.bottomnavigation.BottomNavigationPresenter.updateMenuView(BottomNavigationPresenter.java:62)
            at com.google.android.material.bottomnavigation.BottomNavigationView.inflateMenu(BottomNavigationView.java:254)
            at com.google.android.material.bottomnavigation.BottomNavigationView.<init>(BottomNavigationView.java:187)
            at com.google.android.material.bottomnavigation.BottomNavigationView.<init>(BottomNavigationView.java:114)
                ... 25 more

这就是我在Logcat中得到的东西,

{{1}}

2 个答案:

答案 0 :(得分:1)

您怀疑问题与图标有关,因此您尝试删除它们吗?
如果您仔细查看日志,将会看到

Caused by: java.lang.OutOfMemoryError: 
 Failed to allocate a 10015740 byte allocation with 7465824 free bytes and 7MB until OOM

然后我们看到问题出在

at android.content.Context.getDrawable(Context.java:525)

所以问题确实出在图标上。 10015740字节超过10MB。似乎太大了,几乎没有图标。
尝试调整可绘制图像的大小。我怀疑您需要它们那么大。

答案 1 :(得分:0)

可以看到,内存不足错误。 它与您附加菜单中的图标之一有关。

     Caused by: java.lang.OutOfMemoryError: Failed to allocate a 10015740 byte allocation with 7465824 free bytes

图片很大-10015740字节为9.56 MB,对于一个图标来说,这实在太大了。

请尝试减小图标的大小。