El fondo personalizado para activateBackgroundIndicator en ActionBarSherlock no funciona
Estoy utilizando ActionBarSherlock y estoy tratando de personalizar el atributo activatedBackgroundIndicator para el fondo de la fila.
Si utilizo el último androide sdk, sin el ActionBarSherlock , puedo personalizar el fondo creando el siguiente estilo en res / values / style.xml y definiéndolo en AndroidManifest.xml como android: theme = "@ style / Theme. Personalizado " :
- Cómo hacer relleno de imagen RelativeLayout fondo sin estiramiento
- La barra de direcciones del navegador Mobile Webkit cambia $ (ventana) .height (); Haciendo el fondo-tamaño: la cubierta rescale cada vez
- TextureView setBackgroundColor no funciona
- Cómo estirar / escalar imágenes de fondo en un diseño lineal de Android?
- Android: Configuración de la ventana de fondo en la actividad iniciada
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="Theme.Custom" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:activatedBackgroundIndicator">@drawable/activated_background</item> </style> </resources>
Entonces, mi res / drawable / activated_background.xml contiene el siguiente código:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true" android:drawable="@color/row_activated" /> <item android:drawable="@android:color/transparent" /> </selector>
Por último, el código utilizado para definir cada fila en ListView es:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="?android:attr/activatedBackgroundIndicator"> <TextView android:id="@+id/test_row" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/sample_string" android:textAppearance="?android:attr/textAppearanceMedium" android:padding="15dp"/> </LinearLayout>
El resultado se muestra en el screenshoot. Es una aplicación simple con sólo un ListView con ListView.CHOICE_MODE_SINGLE y getListView (). SetItemChecked (position, true) cuando se hace clic en el elemento de la lista.
El color azul de la fila seleccionada estándar ahora es amarillo y funciona perfectamente.
El problema aparece cuando quiero aplicar la misma personalización con el ActionBarSherlock. Ahora El archivo de estilo es el siguiente y el fondo aparece azul en lugar del amarillo personalizado.
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="Theme.Custom" parent="Theme.Sherlock.Light.DarkActionBar"> <item name="activatedBackgroundIndicator">@drawable/activated_background</item> <item name="android:activatedBackgroundIndicator">@drawable/activated_background</item> </style> <style name="activatedBackgroundIndicator"> <item name="android:background">?android:attr/activatedBackgroundIndicator</item> </style> </resources>
No sé si ActionBarSherlock es compatible con la función android: activatedBackgroundIndicator o si olvidé implementar algo necesario para poder cambiar el color predeterminado.
¿Algunas ideas?
- Reproducir música de fondo en todas las actividades de la aplicación de Android
- La aplicación permite la reproducción de fondo de videos, problemas de Córdoba, Google Play rechaza aplicaciones
- Creación de una imagen de fondo para la aplicación de Android - Java
- TabHost / TabWidget - Escala de la imagen de fondo?
- Problema de fondo de ListView personalizado
- Android nueve patch no se reconoce en el dispositivo
- Cómo configurar un fondo para toda la aplicación en Android?
- ¿Cuál es la diferencia entre setBackgroundResource y setBackgroundDrawable
Finalmente encontré la solución al problema.
Era el contexto utilizado en el adaptador de fila. El constructor utilizado es el que se muestra en la siguiente pieza de código:
public RowAdapter(Activity activity, ArrayList<String> list) { this.mContext = activity.getApplicationContext(); this.elements = list; this.theActivity = activity; this.inflater = (LayoutInflater) this.mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); }
Sólo cambiando el contexto de:
this.mContext = activity.getApplicationContext()
(Application-Context)
a
this.mContext = activity.getBaseContext()
(Activity-Context)
Resuelto el problema y ahora el fondo es el personalizado.
Siempre que necesite manipular Views, vaya a Activity-Context , de lo contrario Application-Context sería suficiente.
Esta respuesta me ayudó a entender por qué usar getBaseContext () en lugar de getApplicationContext () en mi caso.
- Utilizar ActiveAndroid en el contenido de base de datos existente
- Android Studio: java.io.IOException: Una conexión existente fue forzadamente cerrada por el host remoto