9

我有一种情况,我需要以编程方式在 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
4

6 回答 6

14

我有同样的问题,我用这段代码修复了它。

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 上限并且工作正常时,我在我的自定义列表适配器中使用了它。

于 2013-02-19T11:30:04.927 回答
6

试试这条线

rootLayout.setBackgroundResource(d);

代替

rootLayout.setBackgroundDrawable(d);
于 2012-10-08T12:13:19.533 回答
4

试试这个

rootLayout.setBackgroundResource(R.drawable.image);
于 2012-10-08T12:17:21.320 回答
2

按照公认的答案告诉您的方式来做是个坏主意。问题是您还需要调用列表onItemCheckedStateChanged来更新所需的内容(例如操作栏标题)。

在这种情况下,您只需getListView().setItemChecked(position, true);在检查项目和getListView().setItemChecked(position, false);未检查项目时调用。

于 2015-05-21T14:21:28.117 回答
2

请尝试以下代码。

LinearLayout layout=(LinearLayout) findViewById(R.id.layoutImage);
layout.setBackgroundResource(R.drawable.bg);
于 2017-10-24T09:55:13.333 回答
1

你可以使用这样的东西

TypedValue outValue = new TypedValue(); context.getTheme().resolveAttribute(android.R.attr.selectableItemBackgroun d, outValue, true); view.setBackgroundResource(outValue.resourceId);

于 2015-10-17T18:54:50.383 回答