Imran Chowdhury
Imran Chowdhury

Reputation: 13

Binary XML file line #2 Error inflating class android.widget.RelativeLayout for try to dynamically implement theme

I have been trying to implement dynamic them in my project but for some reason its giving the following error. this is how i tried to implement it.

First i defined some custom attributes like:

<resources>
<attr name="themeWindowBackground" format="reference" />
<attr name="themeContentBackground" format="reference" />
<attr name="themeContentTextColor" format="reference" />
<attr name="themeContentTextColorOnPrimary" format="reference" />
<attr name="themeTextColorSuccess" format="reference" />
<attr name="themeTextColorFailure" format="reference" />

then i defined the custom themes in my style.xml file

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- 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="SplashTheme" parent="AppTheme">
    <item name="android:windowBackground">@drawable/bg_splash_screen</item>
</style>

<style name="AppTheme.Black" parent="AppTheme">
    <item name="colorPrimary">@color/material_dark</item>
    <item name="colorPrimaryDark">@color/material_primary_dark</item>
    <item name="colorAccent">@color/material_accent</item>
    <item name="themeWindowBackground">@color/dark_gray</item>
    <item name="themeContentBackground">@color/dark_slate_gray</item>
    <item name="themeContentTextColor">@color/white</item>
    <item name="themeContentTextColorOnPrimary">@color/teal</item>
    <item name="themeTextColorSuccess">@color/green</item>
    <item name="themeTextColorFailure">@color/red</item>
</style>
</resources>

after that i am setting the theme using this

application.setTheme(mPreferenceRepository.savedTheme)

this the function that is geeting the saved theme

public int getSavedTheme() {
    String theme = getStringFromSharedPreference(APP_THEME);
    if (theme.equals(THEME_BLUE)) {
        return R.style.AppTheme_Blue;
    }
    return R.style.AppTheme_Black;
}

now when i'm trying to apply theme in my layout or layout content using this

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="?attr/themeWindowBackground"
android:layout_width="match_parent"
android:layout_height="match_parent">

the application is crashing. this is my message but i can't figure out what i'm doing wrong

Process: com.singularitybd.shellitracker, PID: 2214
              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.singularitybd.shellitracker/com.singularitybd.shellitracker.view.activity.LoginActivity}: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class android.widget.RelativeLayout
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                  at android.app.ActivityThread.-wrap12(ActivityThread.java)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6119)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
               Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class android.widget.RelativeLayout
               Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.widget.RelativeLayout
               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:645)
                  at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
                  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:717)
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:785)
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
                  at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
                  at com.singularitybd.shellitracker.view.activity.LoginActivity.onCreate(LoginActivity.kt:44)
                  at android.app.Activity.performCreate(Activity.java:6679)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                  at android.app.ActivityThread.-wrap12(ActivityThread.java)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6119)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
               Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 13: TypedValue{t=0x2/d=0x7f0301ba a=-1}
                  at android.content.res.TypedArray.getDrawable(TypedArray.java:925)
                  at android.view.View.<init>(View.java:4202)
                  at android.view.ViewGroup.<init>(ViewGroup.java:579)
                  at android.widget.RelativeLayout.<init>(RelativeLayout.java:248)
                  at android.widget.RelativeLayout.<init>(RelativeLayout.java:244)
                  at android.widget.RelativeLayout.<init>(RelativeLayout.java:240)
                  at java.lang.reflect.Constructor.newInstance0(Native Method) 
                  at java.lang.reflect.Constructor.newInstance(Constructor.java:430) 
                  at android.view.LayoutInflater.createView(LayoutInflater.java:645) 
                  at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58) 
                  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:717) 
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:785) 
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
                  at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) 
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 
                  at com.singularitybd.shellitracker.view.activity.LoginActivity.onCreate(LoginActivity.kt:44) 
                  at android.app.Activity.performCreate(Activity.java:6679) 
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                  at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:154) 
                  at android.app.ActivityThread.main(ActivityThread.java:6119) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
Application terminated.

if you can provide me some guidance i will be very grateful. Thank you very much.

Upvotes: 1

Views: 8802

Answers (4)

Mohammed Sadiq
Mohammed Sadiq

Reputation: 11

I had this error when I sat background like this:

android:background="?attr/itemBackground"

in which : 'itemBackground' was not defined in main theme...

Upvotes: 0

Josepharaoh
Josepharaoh

Reputation: 167

I just had this problem occurs when I test my app on a old android phone. However it works on new android phone. I finally find out that I save the layout background image in the res\drawable-v24. Remove the image and save back at res\drawable

Hope this solve your problem

Upvotes: 6

ClassA
ClassA

Reputation: 2660

This is a old question, but I decided to answer anyway. The problem is that you are referencing to a view that does not exist.

From your log:

Binary XML file line #2: Error inflating class android.widget.RelativeLayout

You are trying to inflate a RelativeLayout that doesn't exist.

This may occur when you added a layout for landscape and you forgot to add the RelativeLayout, or it could be that you are referencing to a RelativeLayout with a incorrect id.

Make sure that the RelativeLayout actually exist and that the correct id is used hen you are referencing to it.

Upvotes: 0

JDevoloper
JDevoloper

Reputation: 237

I think and as I understand your statements this problem is about second line of RelativeLayout. Try to add another picture to the background, or try typing

android:background="?attr/themeWindowBackground" ` as style.

Like this : style =?attr/themeWindowBackround

Upvotes: 2

Related Questions