web-dev-qa-db-fra.com

Erreur lors du gonflement de la classe Android.support.design.widget.TabLayout

J'essaie de créer un onglet de menu basé sur la "conception matérielle" de Google à l'aide d'Eclipse, mais j'ai eu une erreur:

Erreur lors du gonflement de la classe Android.support.design.widget.TabLayout

Fichier journal:

07-30 00:52:40.588: E/Trace(31652): error opening trace file: No such file or directory (2)
07-30 00:52:40.672: E/AndroidRuntime(31652): FATAL EXCEPTION: main
07-30 00:52:40.672: E/AndroidRuntime(31652): Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.mykitchen/com.app.mykitchen.MainActivity}: Android.view.InflateException: Binary XML file line #8: Error inflating class Android.support.design.widget.TabLayout
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2184)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2211)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.app.ActivityThread.access$600(ActivityThread.Java:149)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1300)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.os.Handler.dispatchMessage(Handler.Java:99)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.os.Looper.loop(Looper.Java:153)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.app.ActivityThread.main(ActivityThread.Java:4987)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Java.lang.reflect.Method.invokeNative(Native Method)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Java.lang.reflect.Method.invoke(Method.Java:511)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:821)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:584)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at dalvik.system.NativeStart.main(Native Method)
07-30 00:52:40.672: E/AndroidRuntime(31652): Caused by: Android.view.InflateException: Binary XML file line #8: Error inflating class Android.support.design.widget.TabLayout
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.view.LayoutInflater.createView(LayoutInflater.Java:613)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:687)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:746)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:489)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:396)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:352)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:258)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.app.Activity.setContentView(Activity.Java:1867)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at com.app.mykitchen.MainActivity.onCreate(MainActivity.Java:30)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.app.Activity.performCreate(Activity.Java:5020)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1080)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2148)
07-30 00:52:40.672: E/AndroidRuntime(31652):    ... 11 more
07-30 00:52:40.672: E/AndroidRuntime(31652): Caused by: Java.lang.reflect.InvocationTargetException
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Java.lang.reflect.Constructor.constructNative(Native Method)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:417)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.view.LayoutInflater.createView(LayoutInflater.Java:587)
07-30 00:52:40.672: E/AndroidRuntime(31652):    ... 22 more
07-30 00:52:40.672: E/AndroidRuntime(31652): Caused by: Java.lang.NoClassDefFoundError: Android.support.design.R$styleable
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.support.design.widget.TabLayout.<init>(TabLayout.Java:236)
07-30 00:52:40.672: E/AndroidRuntime(31652):    at Android.support.design.widget.TabLayout.<init>(TabLayout.Java:221)
07-30 00:52:40.672: E/AndroidRuntime(31652):    ... 25 more

MainActivity.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    Android:orientation="vertical">

<Android.support.design.widget.TabLayout
        Android:id="@+id/sliding_tabs"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
/>
<Android.support.v4.view.ViewPager
        Android:id="@+id/viewpager"
        Android:layout_width="match_parent"
        Android:layout_height="0px"
        Android:layout_weight="1"
        Android:background="@color/white" />

</LinearLayout>

J'ai essayé de définir le thème AppBase sur AppCompat, mais cela n'aide pas.

12
nabil

J'en ai un peu plus dans mon Logcat. Vous pouvez voir à la fin qu'il y a une explication claire:

You need to use a Theme.AppCompat theme (or descendant) with the design library.

Android.view.InflateException: ligne de fichier XML binaire n ° 6: erreur de gonflement de la classe Android.support.design.widget.TabLayout sur Android.view.LayoutInflater.createView (LayoutInflater.Java:633) sur Android.view.LayoutInflater.createViewFromTag (LayoutInflater .Java: 743) sur Android.view.LayoutInflater.rInflate (LayoutInflater.Java:806) sur Android.view.LayoutInflater.inflate (LayoutInflater.Java:504) sur Android.view.LayoutInflater.inflate (LayoutInflater.Java:414) sur pl.acme_gliwice.smieciarka.nowe.ekran_glowny.MainTrasyFragment.onCreateView (MainTrasyFragment.Java:44) sur Android.support.v4.app.Fragment.performCreateView (Fragment.Java:2337) sur Android.support.ag. .moveToState (FragmentManager.Java:1418) sur Android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.Java:1739) sur Android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.Java: Android.1) support.v4.app.BackStackRecord.executeOps (BackStackRecord.Java:799) sur Android.support. v4.app. 2321) sur Android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.Java:2228) sur Android.support.v4.app.FragmentManagerImpl $ 1.run (FragmentManager.Java:699) sur Android.os.Handler.handleCallback ( Handler.Java:739) sur Android.os.Handler.dispatchMessage (Handler.Java:95) sur Android.os.Looper.loop (Looper.Java:135) sur Android.app.ActivityThread.main (ActivityThread.Java:5376 ) sur Java.lang.reflect.Method.invoke (Native Method) sur Java.lang.reflect.Method.invoke (Method.Java:372) sur com.Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.Java : 908) sur com.Android.internal.os.ZygoteInit.main (ZygoteInit.Java:703) Provoqué par: Java.lang.reflect.InvocationTargetException at Java.lang.reflect.Constructor.newInstance (N ative Method) sur Java.lang.reflect.Constructor.newInstance (Constructor.Java:288) sur Android.view.LayoutInflater.createView (LayoutInflater.Java:607) sur Android.view.LayoutInflater.createViewFromTag (LayoutInflater.Java:743) sur Android.view.LayoutInflater.rInflate (LayoutInflater.Java:806) sur Android.view.LayoutInflater.inflate (LayoutInflater.Java:504) sur Android.view.LayoutInflater.inflate (LayoutInflater.Java:414) sur pl.acme_gliwice. smieciarka.nowe.ekran_glowny.MainTrasyFragment.onCreateView (MainTrasyFragment.Java:44) sur Android.support.v4.app.Fragment.performCreateView (Fragment.Java:2337) sur Android.support.v4.app.FragmentManagerImagerManager. Java: 1418) sur Android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.Java:1739) sur Android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.Java:1808) sur Android.support.v4.app .BackStackRecord.executeOps (BackStackRecord.Java:799) sur Android.support.v4.app.FragmentManagerImpl. executeOps (FragmentManager.Java:2579) sur Android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManager.Java:2366) sur Android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute (Androidmentsupport32). .v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.Java:2228) sur Android.support.v4.app.FragmentManagerImpl $ 1.run (FragmentManager.Java:699) sur Android.os.Handler.handleCallback (Handler.Java:739) sur Android.os.Handler.dispatchMessage (Handler.Java:95) sur Android.os.Looper.loop (Looper.Java:135) sur Android.app.ActivityThread.main (ActivityThread.Java:5376) sur Java.lang. reflect.Method.invoke (Native Method) sur Java.lang.reflect.Method.invoke (Method.Java:372) sur com.Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.Java:908) sur com. Android.internal.os.ZygoteInit.main (ZygoteInit.Java:703) Provoqué par: Java.lang.IllegalArgumentException: vous devez utiliser un thème Theme.AppCompat (ou un descendant) avec le des bibliothèque ign. sur Android.support.design.widget.ThemeUtils.checkAppCompatTheme (ThemeUtils.Java:33) sur Android.support.design.widget.TabLayout. (TabLayout.Java:298) sur Android.support.design.widget.TabLayout. (TabLayout .Java: 292)

Tous ces exemples d'astuces de style ci-dessus ne sont pas exactement vrais.

Nous avons 2 scénarios:

1) Notre TabLayout est dans l'activité. Si tel est le cas, nous devons définir le thème de cette activité sur le thème AppCompat. Nous devons d'abord définir un tel thème dans style.xml (il ne doit pas nécessairement être une version 21).

<style name="TabAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">        
</style>

Ensuite, nous pouvons définir le thème de l'activité dans le fichier manifeste.

<activity
    Android:name=".MyTabActivity"
    Android:theme="TabAppTheme"
/>

Nous n'avons rien à faire avec notre layout.xml

2) Notre TabLayout est à l'intérieur du fragment

Situation similaire mais il est plus difficile de changer de thème.

Nous définissons d'abord le thème comme ci-dessus. Ensuite, nous devons changer le thème uniquement pour notre TabFragment. Pour ce faire, notre ActivityThatHoldsTheFragment doit pas avoir un thème défini dans le manifeste. Il peut l'hériter du thème de l'application mais ne peut pas le définir directement.

Ensuite, nous devons changer le thème du fragment dans OnCreateView de ce fragment:

final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.TabAppTheme);
LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);
View view = localInflater.inflate(R.layout.fragment_main_trasy, container, false);

Le fragment entier onCreateView peut ressembler à ceci:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // create ContextThemeWrapper from the original Activity Context with the custom theme
    final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.TabAppTheme);
    // clone the inflater using the ContextThemeWrapper
    LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);

    View view = localInflater.inflate(R.layout.fragment_main_trasy, container, false);
    tabLayout = (TabLayout) view.findViewById(R.id.tabs);
    viewPager = (ViewPager) view.findViewById(R.id.pager);
    mAdapter = new TabFragment.MyAdapter(getChildFragmentManager());
    viewPager.setAdapter(mAdapter);
    tabLayout.setupWithViewPager(viewPager);

    return view;
}
5
Daniel Więcek

J'ai également rencontré un problème similaire. Après quelques recherches sur le problème, je trouve la solution. Ajoutez une autre ressource de style pour votre tablayout.

Je l'ai également décrit sur mon blog.

http://www.geeksmember.blogspot.in/2015/10/errorerror-inflating-class.html

Ajoutez ceci à vos valeurs-v21/styles.xml. Si vous n'avez pas de dossier values-v21, créez-en un dans le dossier app/res. Et puis créez un fichier styles.xml dans ce dossier.

    <resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppTheme.Base"/>
    <!-- inherit from the material theme -->
    <style name="AppTheme.Base" parent="Android:Theme.Material">
        <!-- colorPrimary is used for the default action bar background -->
        <item name="Android:colorPrimary">#3F51B5</item>

        <!-- colorPrimaryDark is used for the status bar -->
        <item name="Android:colorPrimaryDark">#303F9F</item>

        <!-- colorAccent is used as the default value for colorControlActivated
             which is used to tint widgets -->
        <item name="Android:colorAccent">#FF4081</item>
    </style>

    <style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
        <item name="tabIndicatorColor">#FF4081</item>
    </style>
</resources>

Et puis ajoutez un attribut de style personnalisé à votre tablayout.

<Android.support.design.widget.TabLayout
        Android:id="@+id/sliding_tabs"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        style="@style/MyCustomTabLayout"
/>

J'ai également fait face au même problème et cela fonctionne comme un charme.

Référence: https://code.google.com/p/Android/issues/detail?id=175582

4
user3552206

Je ne sais pas si cela est lié à votre problème. J'ai changé les balises de TabLayout et ViewPager en celles qui correspondent à celles de cette page: https://material.io/develop/Android/components/tab-layout/

Voici mon code de mon application, qui a fait disparaître les erreurs:

<com.google.Android.material.tabs.TabLayout
    Android:id="@+id/sliding_tabs"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    app:tabMode="fixed"/>

<androidx.viewpager.widget.ViewPager
    Android:id="@+id/viewpager"
    Android:layout_width="match_parent"
    Android:layout_height="0px"
    Android:layout_weight="1"
    Android:background="@Android:color/white" />
3
ZeePee

enter image description here

J'obtenais également la même erreur. Je résout le problème en remplaçant

Obtention d'une erreur dans ce code

<Android.support.design.widget.TabLayout
    Android:id="@+id/tab_layout"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:background="?attr/colorPrimary"
    app:layout_constraintEnd_toEndOf="parent"
    app:tabMode="scrollable"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/viewpager" />

<Android.support.v4.view.ViewPager
    Android:id="@+id/viewpager"
    Android:layout_width="0dp"
    Android:layout_height="0dp"

    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

Utilisez ce code pour résoudre le problème mentionné ci-dessus

<com.google.Android.material.tabs.TabLayout
    Android:id="@+id/tab_layout"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:layout_marginBottom="4dp"
    Android:background="?attr/colorPrimary"
    app:layout_constraintBottom_toTopOf="@+id/viewpager"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<androidx.viewpager.widget.ViewPager
    Android:id="@+id/viewpager"
    Android:layout_width="wrap_content"
    Android:layout_height="0dp"
    Android:layout_marginEnd="5dp"
    Android:layout_marginBottom="3dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/tab_layout" />

** Si vous utilisez androidx, vous devez changer Android.support.design.widget.TabLayout en com.google.Android.material.tabs.TabLayout **

0
Bhavesh Chand