1

我遇到了一个RuntimeException和InflateException问题,指出二进制XML文件:错误膨胀类android.support.v7.widget.Toolbar。我创建了一个项目,尝试使用导航抽屉,并使用Android 5.0创建了一个android-support-v7-appcompat库(遵循google文档中的说明)。在应用程序中,我扩展了NavigationDrawerActivity。我不确定是什么导致了这一点。这些库似乎设置正确,但应用程序在启动时崩溃。Android:RuntimeException和InflateException使用android.support.v7.widget.Toolbar

MainActivity.java

public class MainActivity extends NavigationDrawerActivity { 

    private static final String LOGTAG = "MainActivity"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     // Layout 
     setContentView(R.layout.activity_main); 

     super.onCreate(savedInstanceState); 

NavigationDrawerActivity.java

public class NavigationDrawerActivity extends ActionBarActivity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Use ToolBar and set it as ActionBar 
     Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); 
     setSupportActionBar(toolbar); 

activity_main.xml中

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"  xmlns:app="http://schemas.android.com/apk/res/com.mobile_iab_ad_framework"> 

<!--  Added fitSystemWindows to allow NavDrawer overlay ActionBar --> 

<!--  To display fragments --> 
    <FrameLayout 
     android:id="@+id/frame_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

<!--   Use a Toolbar so the drawer can be displayed over ActionBar --> 
     <android.support.v7.widget.Toolbar 
      android:id="@+id/my_awesome_toolbar" 
      style="@style/HeaderBar" 
      app:theme="@style/ActionBarThemeOverlay" 
      app:popupTheme="@style/ActionBarPopupThemeOverlay" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 
    </FrameLayout> 

<!--  Listview to display slider menu --> 
     <ListView 
      android:id="@+id/list_slidermenu" 
      android:layout_width="240dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      android:background="@color/list_background" 
      android:choiceMode="singleChoice" 
      android:divider="@color/list_divider" 
      android:dividerHeight="0dp" 
      android:listSelector="@drawable/list_selector" /> 
</android.support.v4.widget.DrawerLayout> 

logcat的日志

12-06 03:06:56.487: E/AndroidRuntime(7105): FATAL EXCEPTION: main 
12-06 03:06:56.487: E/AndroidRuntime(7105): Process: com.package, PID: 7105 
12-06 03:06:56.487: E/AndroidRuntime(7105): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mobile_iab_ad_framework/com.package.device_discovery.MainActivity}: android.view.InflateException: Binary XML file line #17: Error inflating class android.support.v7.widget.Toolbar 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.app.ActivityThread.access$900(ActivityThread.java:161) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.os.Handler.dispatchMessage(Handler.java:102) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.os.Looper.loop(Looper.java:157) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.app.ActivityThread.main(ActivityThread.java:5356) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at java.lang.reflect.Method.invoke(Method.java:515) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at dalvik.system.NativeStart.main(Native Method) 
12-06 03:06:56.487: E/AndroidRuntime(7105): Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class android.support.v7.widget.Toolbar 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.view.LayoutInflater.createView(LayoutInflater.java:626) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at com.package.device_discovery.MainActivity.onCreate(MainActivity.java:51) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.app.Activity.performCreate(Activity.java:5431) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  ... 11 more 
12-06 03:06:56.487: E/AndroidRuntime(7105): Caused by: java.lang.reflect.InvocationTargetException 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at java.lang.reflect.Constructor.constructNative(Native Method) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.view.LayoutInflater.createView(LayoutInflater.java:600) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  ... 23 more 
12-06 03:06:56.487: E/AndroidRuntime(7105): Caused by: java.lang.NoSuchMethodError: android.support.v4.content.ContextCompat.getDrawable 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.support.v7.internal.widget.TintManager.getDrawable(TintManager.java:133) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.support.v7.internal.widget.TintTypedArray.getDrawable(TintTypedArray.java:62) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.support.v7.widget.Toolbar.<init>(Toolbar.java:249) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  at android.support.v7.widget.Toolbar.<init>(Toolbar.java:191) 
12-06 03:06:56.487: E/AndroidRuntime(7105):  ... 26 more 

styles.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 

    <!-- 
     Base application theme, dependent on API level. This theme is replaced 
     by AppBaseTheme from res/values-vXX/styles.xml on newer devices. 
    --> 
    <style name="AppBaseTheme" parent="android:Theme.Light"> 
     <!-- 
      Theme customizations available in newer API levels can go in 
      res/values-vXX/styles.xml, while customizations related to 
      backward-compatibility can go here. 
     --> 
     <item name="android:actionBarStyle">@style/MyActionBar</item> 
     <item name="windowActionBar">false</item> 
    </style> 

    <!-- Application theme. --> 
    <style name="AppTheme" parent="AppBaseTheme"> 
     <!-- All customizations that are NOT specific to a particular API-level can go here. --> 
     <item name="android:actionBarStyle">@style/MyActionBar</item> 
     <item name="windowActionBar">false</item> 
    </style> 

    <!-- Extends Theme.Holo.Light and removes the Action Bar --> 
    <style name="ThemeWithoutActionBar" parent="android:Theme.Holo.Light"> 
     <item name="android:windowActionBar">false</item> 
     <item name="android:windowNoTitle">true</item> 
    </style> 

    <!-- ************************************************************** --> 
    <!-- Action Bar Style (Requires API 11) --> 
    <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> 
     <item name="android:background">@color/action_bar_bg</item> 
     <item name="android:height">60dp</item> 
     <item name="android:titleTextStyle">@style/MyActionBar.TitleTextStyle</item> 
    </style> 
    <!-- ************************************************************** --> 

    <!-- ************************************************************** --> 
    <!-- Action Bar Text Style (Requires API 13) --> 
    <style name="MyActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title"> 
     <item name="android:textColor">#FFFFFF</item> 
     <item name="android:textSize">20sp</item> 
    </style> 
    <!-- ************************************************************** --> 



    <!-- ************************************************************** --> 
    <!-- Toolbar Style --> 
    <style name="toolbarStyle" parent="Theme.AppCompat"> 

    </style> 

    <style name="ActionBarThemeOverlay" parent=""> 
     <!-- Color of Toolbar Font Color --> 
     <item name="android:textColorPrimary">@android:color/white</item> 

     <!-- Color of Toolbar Action Buttons --> 
     <item name="colorControlNormal">@android:color/black</item> 
     <item name="colorControlHighlight">@android:color/black</item> 
    </style> 

    <style name="HeaderBar"> 
     <!-- Color of Toolbar Background Color --> 
     <item name="android:background">@color/action_bar_bg</item> 
     <item name="android:minHeight">80dp</item> 
    </style> 

    <style name="ActionBarPopupThemeOverlay" parent="ThemeOverlay.AppCompat.Light" > 
     <!-- Color of Toolbar Popup from Action Overflow --> 
     <!-- 
     <item name="android:background">@android:color/holo_green_light</item> 
     <item name="android:textColor">@android:color/holo_green_dark</item> 
     --> 
    </style> 
    <!-- ************************************************************** --> 

</resources> 
+1

感觉就像你正在使用旧版本的'support-v4'库。 ContextCompat上的'getDrawable()'是在过去一年左右的某个时间添加的。 – CommonsWare 2014-12-06 21:18:27

+0

嗨commonsWare。你说的对。我还使用了android-support-v13.jar库文件,并且在控制台中发现了这个消息:“WARNING:在依赖列表中找到了android-support-v4和android-support-v13因为v13包含v4,只使用v13。“ – codeshark 2014-12-06 21:26:03

+1

“support-v13”或“support-v4”将提供“ContextCompat”类。所以,现在听起来你可能正在使用旧版本的'support-v13'。 – CommonsWare 2014-12-06 21:29:49

回答

1

的解决方案是使用Android的支持-V4的最新版本,Android的支持-V13,Android的支持-v7文库

相关问题