Configuración de Android LinearLayout de fondo mediante programación

Tengo una situación donde necesito fijar un fondo en un LinearLayout programatically.

En mi diseño, estoy configurando mi fondo usando `android: background ="? Android: attr / activatedBackgroundIndicator ", pero quiero configurar esta 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" > 

He intentado usar:

 Drawable d = getActivity().getResources().getDrawable(android.R.attr.activatedBackgroundIndicator); rootLayout.setBackgroundDrawable(d); 

Pero se bloquea. ¿Algunas ideas?

Edit: También había intentado usar:

 rootLayout.setBackgroundResource(android.R.attr.activatedBackgroundIndicator); 10-08 15:23:19.018: E/AndroidRuntime(11133): android.content.res.Resources$NotFoundException: Resource ID #0x10102fd 

Tuve el mismo problema y lo arreglé usando este pedazo de código.

El android.R.attr. * Son punteros al de un tema y no al recurso real dibujable definido. Tienes que usar TypedArray para acceder al 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)); } 

He utilizado esto en mi adaptador de lista personalizada cuando detecta SDK superior y funcionó bien.

Prueba esta línea

 rootLayout.setBackgroundResource(d); 

en lugar de

 rootLayout.setBackgroundDrawable(d); 

prueba esto

 rootLayout.setBackgroundResource(R.drawable.image); 

Es una mala idea hacerlo de la misma manera que la respuesta aceptada le dice. El problema es que también necesita llamar a la lista onItemCheckedStateChanged para actualizar lo que se necesita (el título de la barra de acción, por ejemplo).

En ese caso todo lo que necesitas hacer es simplemente llamar a getListView().setItemChecked(position, true); Cuando el elemento está marcado y getListView().setItemChecked(position, false); Cuando no está marcada.

Puedes usar algo como esto

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

  • Android InputType parámetro de diseño - cómo permitir que los decimales negativos?
  • cómo configurar el ancho de los botones en android para cubrir el ancho de la pantalla?
  • Hacer referencia a otro archivo layout.xml sin duplicarlo
  • Desplazarse verticalmente por toda la vista cuando se muestra el teclado
  • Android superponer una vista ontop de todo?
  • Cómo hacer un TextView ocupar todo el espacio libre en el medio?
  • Ajustar un ImageView (y su src) al ancho de diseño y hacer su altura proporcional
  • Android: cómo utilizar la fuente Tamil
  • ¿Cuál es el mejor diseño en android que podemos usar para diseñar la interfaz de usuario?
  • Modificación del diseño del título de diálogo en Android
  • La vista central de Android en FrameLayout no funciona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.