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:
- Android: ¿Cómo tamaño de botones?
- Falta el puerto reenviado en el Visor de jerarquía: Uso de Android Studio
- ¿Cuál es la diferencia entre fill_parent y wrap_content?
- Problema de diseño relativo de Android con gravedad
- Cómo cambiar el tamaño de una vista web de Android después de agregar datos en ella
<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
- Disposición de Android - problema de alineación con ImageView
- Cómo obtener el tamaño de texto predeterminado en píxeles en Android
- ¿Posible inflar una disposición de XML en un servicio? (Androide)
- Implementación del patrón DAO en el proyecto de Android
- ¿Cómo puedo colocar nuevos elementos en scrollview
- Los bordes de desvanecimiento de los íconos Android no funcionan
- Cómo traer una vista al frente sin llamar bringToFront ()?
- Stackoverflow: ¿Causado por vistas anidadas?
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);
- ¿Cómo hacer un menú de opciones dinámicas?
- Cómo solicitar un IntentService para obtener información sobre su cola