I have tried to change the background color of options menu in my android app. I am using ActionBarSherlock library. I have tried this code for changing the background color of options menu
https://stackoverflow.com/a/8475357/584095
But I ended up with an exception "java.lang.illegalstateexception: a factory has already been set on this layoutinflater" at line
LayoutInflater.setFactory();
I don't know what is wrong in this code. Can anyone help me in resolving this issue?
To keep compatibility library working and avoid "java.lang.illegalstateexception: a factory has already been set on this layoutinflater", you need to get a final reference to the already set Factory and call its onCreateView within your own Factory.onCreateView. Before that an introspection trick must be use to allow you to set one more time a Factory to the LayoutInflater :
There been a change in support library since version 22.1.0.
You will get an IllegalStateException if you try to call
getLayoutInflater().setFactory()
You should use the new api
ActionBarActivity
Or simply use the old version
com.android.support:appcompat-v7:22.0.0
com.android.support:appcompat-v4:22.0.0
This happens because you are using compatibility library. It sets own Factory to deal with platform specific layouts. You may try to set own factory in onCreate() method before calling super.onCreate(). This will disallow compatibility library to override factory and you will be unable to inflate fragments from xml files, but styling should work.
I faced the same issue but no answer helped me.
In my case:
I'm extending AppCompatActivity
Project targeting API 27
Implementation support lib 27.1.1
Solution: Apparently, now there is no need of setting the Factory to the LayoutInflater, it would crash or be ignored. Just override both methods onCreateView(...) in your AppCompatActivity (from android.support.v4.app.BaseFragmentActivityApi14)
This works for me: