(Activity+preferencefragment) Error inflating clas

2019-02-20 06:57发布

I have no idea about this error. I got these mesaage from google developer console. Some devices like z3, htc m8 ,m9 can't execute my app. Could someone give me some hint about the error?

Stacktrace :

java.lang.RuntimeException: Unable to start activity ComponentInfo{package name/package name.SettingsActivity}: android.view.InflateException: Binary XML file line #31: Error inflating class com.android.internal.widget.ActionBarContainer
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2499)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2563)
    at android.app.ActivityThread.access$800(ActivityThread.java:162)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1438)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:209)
    at android.app.ActivityThread.main(ActivityThread.java:5900)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1005)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:800)
    Caused by: android.view.InflateException: Binary XML file line #31: Error inflating class com.android.internal.widget.ActionBarContainer
    at android.view.LayoutInflater.createView(LayoutInflater.java:633)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
    at com.android.internal.policy.impl.PhoneWindow.generateLayout(PhoneWindow.java:3659)
    at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:3755)
    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:403)
    at android.app.Activity.setContentView(Activity.java:2174)
    at android.preference.PreferenceActivity.onCreate(PreferenceActivity.java:553)
    at pavkage name.SettingsActivity.onCreate(Unknown Source)
    at android.app.Activity.performCreate(Activity.java:5981)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1124)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2452)
    ... 10 more
    Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Constructor.newInstance(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
    at android.view.LayoutInflater.createView(LayoutInflater.java:607)
    ... 24 more
    Caused by: java.lang.RuntimeException: Failed to resolve attribute at index 13
    at android.content.res.TypedArray.getDrawable(TypedArray.java:747)
    at android.view.View.<init>(View.java:3785)
    at android.view.ViewGroup.<init>(ViewGroup.java:513)
    at android.widget.FrameLayout.<init>(FrameLayout.java:128)
    at android.widget.FrameLayout.<init>(FrameLayout.java:124)
    at android.widget.FrameLayout.<init>(FrameLayout.java:119)
    at com.android.internal.widget.ActionBarContainer.<init>(ActionBarContainer.java:61)
    ... 27 more

styles.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">true</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>

AndroidManifest.xml

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity
        android:name="package name.SettingsActivity"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:theme="@style/AppTheme.AppBarOverlay">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

xml

    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="@string/pref_general_category">
        <SeekBarPreference
            android:defaultValue="10"
            android:key="@string/PrefResetWhistleIntervalKey"
            android:summary="@string/pref_reset_whistle_interval"
            android:title="@string/pref_title_reset_whistle_interval"/>
        <SeekBarPreference
            android:defaultValue="10"
            android:key="@string/PrefWhistleAmountKey"
            android:summary="@string/pref_whistle_count"
            android:title="@string/pref_title_whistle_count"/>
        <SeekBarPreference
            android:key="@string/PrefVolumeKey"
            android:summary="@string/pref_alarm_volume"
            android:title="@string/pref_title_alarm_volume"/>
        <SwitchPreference
            android:defaultValue="false"
            android:key="@string/PrefMediaPlayerLoopKey"
            android:summary="@string/pref_mediaplay_loop"
            android:title="@string/pref_title_mediaplay_loop"/>
        <Preference
            android:clickable="false"
            android:editable="false"
            android:enabled="true"
            android:key="@string/PrefChooseAudioKey"
            android:selectable="true"
            android:summary=""
            android:title="@string/pref_title_choose_media"/>
    </PreferenceCategory>
    <PreferenceCategory android:title="@string/pref_battery_save_category">
        <ListPreference
            android:defaultValue="@string/pref_sensitivity_default_value"
            android:dialogTitle="@string/pref_title_sensitivity"
            android:entries="@array/array_sensitivity_item"
            android:entryValues="@array/array_sensitivity_value"
            android:key="@string/PrefSensitivityKey"
            android:summary="@string/pref_sensitivity"
            android:title="@string/pref_title_sensitivity"/>
    </PreferenceCategory>
        <PreferenceCategory android:title="@string/pref_system_category">
            <SwitchPreference
                android:defaultValue="true"
                android:key="@string/PrefEnableServiceKey"
                android:summary="@string/pref_service_on_off"
                android:title="@string/pref_title_service_on_off"/>
            <SwitchPreference
                android:defaultValue="true"
                android:key="@string/PrefEnableBootServiceKey"
                android:summary="@string/pref_start_service_ono_ff"
                android:title="@string/pref_title_start_service_on_off"/>
    </PreferenceCategory>
    <PreferenceCategory android:title="@string/testMode">
        <Preference
            android:clickable="false"
            android:editable="false"
            android:enabled="true"
            android:key="@string/PrefTestModeKey"
            android:selectable="true"
            android:summary="@string/pref_test_mode"
            android:title="@string/pref_title_test_mode"/>
    </PreferenceCategory>
</PreferenceScreen>

seekbarpreference taken from http://robobunny.com/blog_files/android_seekbar_preference/SeekBarPreference.java

2条回答
smile是对你的礼貌
2楼-- · 2019-02-20 07:14

I had the same error, and here is how I dealt with it. In the styles.xml file, in the first "AppTheme" style put Base infront of Theme.AppCompat. So it would be "Base.Theme.AppCompat.Light.DarkActionBar".

After this, go to your "AndroidManifest" and in your activity do not use "AppBarOverlay". So it would be just "android:theme="@style/AppTheme".

Furthermore, in "AndroidManifest" remove "package name" from your activity name, and just use ".SettingsActivity".

If you have other activities then instead of defining AppTheme in each activity, just use android:parentActivityName=".SettingsActivity."

I know you want to have an action bar and removing AppBarOverlay could help. Let me know if it works.

查看更多
小情绪 Triste *
3楼-- · 2019-02-20 07:15

extend class with AppCompatActivity instead of Activity it will give you the action bar

查看更多
登录 后发表回答