错误膨胀 class android.support.design.internal.BottomNavigationView

Error inflating class android.support.design.internal.BottomNavigationView

我正在制作我的第一个应用程序。 它是一个简单的应用程序,带有启动画面和主要 activity,现在有了风味,我有两个构建变体:

免费版: activity

底部带有 Admob 横幅

付费版: 该应用程序不会在底部显示 admob 横幅,而是将其替换为用于切换的底部导航视图 activity(我会为此添加另一个 activity)。

我告诉你,在我添加这个底部导航视图之前,应用程序的所有部分都正常工作,包括构建变体。

这是我为添加底部导航菜单所做的:

首先,我将底部导航视图放在 xml activity 文件的底部:

valutausato.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
    android:layout_marginTop="50dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_margin="8dp"
    android:layout_centerHorizontal="true">

    <TextView
        android:id="@+id/TitoloText"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="VALUTA IL TUO USATO"
        android:textSize="32dp"
        android:textAlignment="center"
        android:textColor="@color/colorPrimaryDark"
        android:fontFamily="sans-serif-condensed"
        android:layout_weight="1"
        android:textStyle="bold" />

</LinearLayout>

<LinearLayout
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_marginTop="70dp"
    android:layout_marginHorizontal="40dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Prezzo In Negozio:"
        android:fontFamily="sans-serif"
        android:textStyle="bold|italic"
        android:textColor="#111"
        android:textSize="22dp"/>

</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="100dp"
    android:layout_centerHorizontal="true">

    <EditText
        android:id="@+id/ProdottoNuovoTxt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="2dp"
        android:layout_weight="1"
        android:inputType="numberDecimal"
        android:digits="0123456789."
        android:maxLength="30"
        android:text="Inserisci qui il prezzo.."
        android:textSize="22dp"
        android:fontFamily="sans-serif-condensed"
        android:textColor="@color/colorPrimary"/>

</LinearLayout>

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="160dp">
    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="In Garanzia"
        android:layout_marginRight="0dp"
        android:textSize="17dp" />
</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="200dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Condizioni prodotto"
        android:fontFamily="sans-serif"
        android:textColor="#111"
        android:textStyle="bold|italic"
        android:textSize="22dp"/>
</LinearLayout>

<LinearLayout
    android:layout_marginTop="250dp"
    android:layout_centerHorizontal="true"
    android:layout_marginHorizontal="40dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusable="true"
    android:focusableInTouchMode="true">
    <Spinner
        android:id="@+id/ProdottoDanneggiatospn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginRight="0dp"
        android:textColor="@color/colorPrimary"
        android:layout_weight="1"/>

</LinearLayout>
<LinearLayout

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="290dp">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Accessori"
        android:layout_weight="1"
        android:fontFamily="sans-serif"
        android:textStyle="bold|italic"
        android:textColor="#111"
        android:textSize="22dp"/>

</LinearLayout>

<LinearLayout
    android:layout_marginTop="340dp"
    android:layout_centerHorizontal="true"
    android:layout_marginHorizontal="40dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <Spinner
        android:id="@+id/PartiMancantispn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginRight="0dp"
        android:textColor="@color/colorPrimary"
        android:layout_weight="1"/>

</LinearLayout>

<LinearLayout
    android:layout_marginTop="400dp"
    android:layout_centerHorizontal="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <Button
        android:id="@+id/BtnCalcola"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Calcola"
        android:background="@color/ColorButton"
        android:layout_weight="1"
        android:fontFamily="sans-serif-smallcaps"
        android:textStyle="bold|italic"
        android:textSize="17dp"/>

</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="470dp"
    android:layout_weight="1">

    <TextView
        android:id="@+id/FormPrezzoFinale"
        android:textSize="22dp"
        android:fontFamily="sans-serif-condensed"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#002F80"
        android:layout_weight="1"
        android:text="prova"/>

</LinearLayout>

<android.support.design.internal.BottomNavigationView
    android:id="@+id/MenuBottom"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@drawable/background_menu_color"
    app:itemTextColor="@drawable/background_menu_color"
    app:menu="@menu/background_menu_main"/>

<com.google.android.gms.ads.AdView
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/SmartBanner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    android:layout_marginTop="60dp"
    ads:adSize="SMART_BANNER"
    ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>

</RelativeLayout>

在此之后,我使用正确的依赖关系设置我的 app.build.gradle 文件

app.build.gradle

apply plugin: 'com.android.application'

android {
compileSdkVersion 26
defaultConfig {
    applicationId "com.viniusapp.value"
    minSdkVersion 15
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

flavorDimensions "version"

productFlavors {
    freeVersion {

        dimension "version"
        applicationId "com.viniusapp.value.lite"
        versionName = "1.0-lite"           
    }

    paidVersion {

        dimension "version"        
        applicationId "com.viniusapp.value.premium"
        versionName = "1.0-premium"                    
       }
   }
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
compile 'com.google.android.gms:play-services-ads:11.8.0'
compile 'com.android.support:design:26.1.0'
}

稍后我在 drawable 文件夹中创建底部导航视图的文件

background_menu_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:color="@color/colorPrimaryDark"       android:state_enabled="true"/>

    <item android:color="@color/colorPrimary" android:state_enabled="true"/>

</selector>

最后,我在主 res 文件夹中创建了 "menu" 文件夹,并为菜单项创建了 xml 文件,并为这两个操作创建了两个图像资源。

background_menu_main.xml

<?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">

<item
    android:id="@+id/Action_Value"
    android:enabled="true"
    android:icon="@drawable/ic_value"
    android:title="Valuta"
    app:showAsAction="ifRoom"
    />
<item
    android:id="@+id/Action_Search"
    android:enabled="true"
    android:icon="@drawable/ic_search"
    android:title="Cerca Sul Web"
    app:showAsAction="ifRoom"
    />

</menu>

我做的最后一件事是在 java 文件中添加 BottomNavigation 视图(我删除了所有对这个问题无用的代码)

package com.vkapp.valutatoreusato;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.internal.BottomNavigationMenuView;
import android.text.Editable;
import android.text.InputFilter;
import android.text.TextWatcher;
import android.text.method.DigitsKeyListener;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
import junit.runner.Version;
import java.lang.reflect.Type;



public class ValutaUsato extends Activity {

int Iva = 22;                                  
double PriceProductNew;                    
double SalePriceOfProduct = 0;               
boolean FirstLaunch = true;                         
int NumeroUtilizziTotali = 0;
Button BtnCalcola = null;                          
EditText PriceProductNewTxt = null;                  
TextView SalePriceText = null;                      
Spinner DamageProductState = null;                 
Spinner MissPartProductState = null;                
InterstitialAd mInterstitialAd;
AdView SmartBanner;
BottomNavigationMenuView BottomNavigationMenuMoveForMove = null;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {              

    BtnCalcola = (Button) findViewById(R.id.BtnCalcola);          
    BtnCalcola.setEnabled(false);                                 
    PriceProductNewTxt = (EditText) findViewById(R.id.ProdottoNuovoTxt);    
    SalePriceText = (TextView) findViewById(R.id.FormPrezzoFinale);         
    DamageProductState = (Spinner) findViewById(R.id.ProdottoDanneggiatospn);  
    MissPartProductState = (Spinner) findViewById(R.id.PartiMancantispn);   
    BottomNavigationMenuMoveForMove = (BottomNavigationMenuView) findViewById(R.id.MenuBottom);
    BottomNavigationMenuMoveForMove.setEnabled(false);

    super.onCreate(savedInstanceState);

    setContentView(R.layout.valutausato);                         


    if (BuildConfig.FLAVOR.equals("freeVersion")) {

        Log.d("TAG", "Free Version running");
        Log.d("TAG", BuildConfig.APPLICATION_ID);
        Log.d("TAG", BuildConfig.VERSION_NAME);
        MobileAds.initialize(this, "ca-app-pub-3526806334939799/1381568933");

        SmartBanner = findViewById(R.id.SmartBanner);
        AdRequest adRequest = new AdRequest.Builder().build();
        SmartBanner.loadAd(adRequest);

        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
        mInterstitialAd.loadAd(new AdRequest.Builder().build());
        ;
    }

    if (BuildConfig.FLAVOR.equals("paidVersion")) {

        Log.d("TAG", "Paid Version running");
        BottomNavigationMenuMoveForMove.setEnabled(true);
        Log.d("TAG", BuildConfig.APPLICATION_ID);
        Log.d("TAG", BuildConfig.VERSION_NAME);

       }
   }
 }

之后我的项目看起来像这样:

Project Structure

Preview of main activity

但是现在当我 deubg/run 应用程序启动画面工作正常但是当主要 activity 启动应用程序时崩溃并出现以下错误:

01-11 18:07:54.000 7279-7279/com.viniusapp.value.lite E/AndroidRuntime: FATAL EXCEPTION: main
                                                                    Process: com.viniusapp.value.lite, PID: 7279
                                                                    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.viniusapp.value.lite/com.vkapp.valutatoreusato.ValutaUsato}: android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class android.support.design.internal.BottomNavigationView
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
                                                                        at android.app.ActivityThread.-wrap11(Unknown Source:0)
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                        at android.os.Looper.loop(Looper.java:164)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:6494)
                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
                                                                     Caused by: android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class android.support.design.internal.BottomNavigationView
                                                                     Caused by: android.view.InflateException: Binary XML file line #0: Error inflating class android.support.design.internal.BottomNavigationView
                                                                     Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.design.internal.BottomNavigationView" on path: DexPathList[[zip file "/data/app/com.viniusapp.value.lite-yk6VQ4PuiYd-h1puOhz6iA==/base.apk", zip file "/data/app/com.viniusapp.value.lite-yk6VQ4PuiYd-h1puOhz6iA==/split_lib_dependencies_apk.apk", zip file "/data/app/com.viniusapp.value.lite-yk6VQ4PuiYd-h1puOhz6iA==/split_lib_slice_0_apk.apk", zip file "/data/app/com.viniusapp.value.lite-yk6VQ4PuiYd-h1puOhz6iA==/split_lib_slice_1_apk.apk", zip file "/data/app/com.viniusapp.value.lite-yk6VQ4PuiYd-h1puOhz6iA==/split_lib_slice_2_apk.apk", zip file "/data/app/com.viniusapp.value.lite-yk6VQ4PuiYd-h1puOhz6iA==/split_lib_slice_3_apk.apk", zip file "/data/app/com.viniusapp.value.lite-yk6VQ4PuiYd-h1puOhz6iA==/split_lib_slice_4_apk.apk", zip file "/data/app/com.viniusapp.value.lite-yk6VQ4PuiYd-h1puOhz6iA==/split_lib_slice_5_apk.apk", zip file "/data/app/com.viniusapp.value.lite-yk6VQ4PuiYd-h1puOhz6iA==/split_lib_slice_6_apk.apk", zip file "/data/app/com.viniusapp.value.lite-yk6VQ4PuiYd-h1puOhz6iA==/split_lib_slice_7_apk.apk", zip file "/data/app/com.viniusapp.value.lite-yk6VQ4PuiYd-h1puOhz6iA==/split_lib_slice_8_apk.apk", zip file "/data/app/com.viniusapp.value.lite-yk6VQ4PuiYd-h1puOhz6iA==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.viniusapp.value.lite-yk6VQ4PuiYd-h1puOhz6iA==/lib/x86, /system/lib, /vendor/lib]]
                                                                        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
                                                                        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
                                                                        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                                                                        at android.view.LayoutInflater.createView(LayoutInflater.java:606)
                                                                        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
                                                                        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
                                                                        at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
                                                                        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
                                                                        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
                                                                        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                                                                        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
                                                                        at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:419)
                                                                        at android.app.Activity.setContentView(Activity.java:2669)
                                                                        at com.vkapp.valutatoreusato.ValutaUsato.onCreate(ValutaUsato.java:66)
                                                                        at android.app.Activity.performCreate(Activity.java:6999)
                                                                        at android.app.Activity.performCreate(Activity.java:6990)
                                                                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)

我看到这个错误

at com.vkapp.valutatoreusato.ValutaUsato.onCreate(ValutaUsato.java:66)

link我这个说法

BottomNavigationMenuMoveForMove = (BottomNavigationMenuView) findViewById(R.id.MenuBottom);

我希望你已经清楚了。

感谢您的帮助

你用错了class。您在代码中有 BottomNavigationMenuView 个对象,但您的实际视图是 BottomNavigationView.

改为将您的代码更改为:

BottomNavigationView bottomNavView = (BottomNavigationView) findViewById(R.id.MenuBottom);

您在 xml 代码中使用了错误的 class。应该是:

<android.support.design.widget.BottomNavigationView

而不是

<android.support.design.internal.BottomNavigationView

不同之处在于关键字:internalwidget

接下来在 Activity 中将 BottomNavigationMenuView 更改为 BottomNavigationView。还要确保

 super.onCreate(savedInstanceState);
 setContentView(R.layout.valutausato)

代码在 onCreate 之上,而不是在与 ID 连接之后。

将所有可绘制对象从 "drawable-v21" 文件夹复制到 "drawable"。

在 proguard-rules.pro 文件中添加以下行:

-不要警告 org.xmlpull.v1.XmlPullParser

-不要警告 org.xmlpull.v1.XmlSerializer

-保持 class org.xmlpull.v1.* {*;}