我遇到需要以编程方式在LinearLayout上设置背景的情况。
在我的布局中,我使用`android:background =“?android:attr / activatedBackgroundIndicator”来设置我的背景,但是我想以编程方式设置它:
<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" >
我尝试过使用:
Drawable d = getActivity().getResources().getDrawable(android.R.attr.activatedBackgroundIndicator);
rootLayout.setBackgroundDrawable(d);
但它崩溃了。有什么想法吗?
编辑:我也尝试过使用:
rootLayout.setBackgroundResource(android.R.attr.activatedBackgroundIndicator);
10-08 15:23:19.018: E/AndroidRuntime(11133): android.content.res.Resources$NotFoundException: Resource ID #0x10102fd
答案 0 :(得分:13)
我遇到了同样的问题,我使用这段代码修复了它。
android.R.attr。*是指向主题的指针,而不是指定的实际可绘制资源。您必须使用TypedArray来访问ID。
theView = this.inflater.inflate(R.layout.list_row_job_favorited, null);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
TypedArray a = mContext.obtainStyledAttributes(new int[] { android.R.attr.activatedBackgroundIndicator });
int resource = a.getResourceId(0, 0);
//first 0 is the index in the array, second is the default value
a.recycle();
theView.setBackground(mContext.getResources().getDrawable(resource));
}
我在自定义列表适配器中使用它时检测到SDK上层并且工作正常。
答案 1 :(得分:5)
试试这一行
rootLayout.setBackgroundResource(d);
而不是
rootLayout.setBackgroundDrawable(d);
答案 2 :(得分:3)
试试这个
rootLayout.setBackgroundResource(R.drawable.image);
答案 3 :(得分:1)
按照接受的答案告诉你的方式做这件事是一个坏主意。问题是您还需要调用列表makemigrations
来更新所需内容(例如操作栏标题)。
在这种情况下,您只需在选中项目时调用onItemCheckedStateChanged
,然后在未选中时调用getListView().setItemChecked(position, true);
。
答案 4 :(得分:1)
你可以使用这样的东西
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.selectableItemBackgroun d, outValue, true);
view.setBackgroundResource(outValue.resourceId);
答案 5 :(得分:1)
请尝试以下代码。
LinearLayout layout=(LinearLayout) findViewById(R.id.layoutImage);
layout.setBackgroundResource(R.drawable.bg);