I have a situation where I need to set a background on a LinearLayout programatically.
In my layout, I am setting my background using `android:background="?android:attr/activatedBackgroundIndicator", but I want to set this programatically:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myLayoutId"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="left|center"
android:paddingBottom="5dip"
android:paddingLeft="5dip"
android:background="?android:attr/activatedBackgroundIndicator"
android:paddingTop="5dip" >
I've tried using:
Drawable d = getActivity().getResources().getDrawable(android.R.attr.activatedBackgroundIndicator);
rootLayout.setBackgroundDrawable(d);
But it crashes. Any ideas?
Edit: I had also tried using:
rootLayout.setBackgroundResource(android.R.attr.activatedBackgroundIndicator);
10-08 15:23:19.018: E/AndroidRuntime(11133): android.content.res.Resources$NotFoundException: Resource ID #0x10102fd
I had the same problem and I fixed it using this piece of code.
The android.R.attr.* are pointers to the in a theme and not to the actual drawable resource defined. You have to use the TypedArray to access the id.
I used this in my custom list adapter when detects SDK upper and worked fine.
try this line
instead of
Please try the following code.
try this
It's a bad idea doing it the way the accepted answer tells you to. The problem is that you also need to call the list's
onItemCheckedStateChanged
to update what's needed (the action bar title for example).In that case all you need to do is simply call
getListView().setItemChecked(position, true);
when the item is checked andgetListView().setItemChecked(position, false);
when it's not checked.You can use something like this
TypedValue outValue = new TypedValue(); context.getTheme().resolveAttribute(android.R.attr.selectableItemBackgroun d, outValue, true); view.setBackgroundResource(outValue.resourceId);