11

Estoy tratando de establecer el color de fondo de una ventana emergente, pero todo lo que he probado no funcionó correctamente.¿Cómo puedo cambiar el color de fondo de una ventana emergente giratoria?

Este es el control de número:

<Spinner 
    android:id="@+id/myspinner" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@null" 
    android:drawSelectorOnTop="true" /> 

Cuando hago clic en él, se muestra una ventana emergente con un fondo blanco, y yo quiero cambiar eso.

El wich línea xml que utilizo para llenar la ventana emergente es:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/list_selector"  
    android:paddingBottom="@dimen/padding_medium" 
    android:layout_marginBottom="@dimen/padding_medium" 
    android:orientation="vertical"> 

    .......... 

</RelativeLayout> 

y el fondo dibujable list_selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Pressed --> 
    <item 
    android:state_pressed="true" 
    android:drawable="@color/green" /> <!-- @drawable/tab_press --> 

    <!-- Selected --> 
    <item 
    android:state_selected="true" 
    android:drawable="@color/green" /> <!-- @drawable/tab_press --> 

</selector> 

Adición de un estado predeterminado para el código XML anterior es aceptable, pero el control principal de giro muestra el artículo con ese color de fondo, y no quiero eso.

Otra cosa que he tratado es establecer el color de fondo negro en la aplicación a styles.xml

<style name="AppTheme" parent="android:Theme.Light"> 
    <item name="android:background">#000000</item> 
    <item name="android:textColor">#FFFFFF</item> 
    <item name="android:typeface">sans</item> 
</style> 

que anula el fondo emergente también, pero tiene efectos colaterales indeseables. ¿Hay alguna manera de lograr esto de una manera simple?

Gracias!

PD: Estoy usando API nivel 10 (2.3.3) y el atributo android:popupBackground no existe.

+0

Prueba este http://www.gersic.com/blog.php?id=57 –

Respuesta

5

Ninguna de las soluciones anteriores funcionó para mí.

La solución estaba escribiendo en el adaptador pasa a la ruleta una implementación diferente en el getDropDownView método para visualizar una presentación diferente con colores personalizados:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View vista = convertView;  

    // layout for spinner widget 

    if (vista==null) { 
     LayoutInflater inflater = actividad.getLayoutInflater(); 
     vista = inflater.inflate(R.layout.fila_colores_spinner, null);     
    } 

    return vista; 
} 

@Override 
public View getDropDownView(int position, View convertView,ViewGroup parent) { 
    View vista = convertView;  

    //layout for spinner popup 

    if (vista==null) { 
     LayoutInflater inflater = actividad.getLayoutInflater(); 
     vista = inflater.inflate(R.layout.fila_colores_spinner_popup, null);      
    } 

    return vista; 
} 
+0

Por alguna razón esto no funciona en pan de jengibre - el fondo de la el artículo parece ser sobrescrito. Es más fácil simplemente hacer que el color del texto sea negro en este caso. – aleb

+0

+1 porque esta solución funciona en API 15 (la que necesitaba) mientras que spinner.setPopupBackgroundDrawable() solo funciona en API 16. –

0
<Spinner 
     android:id="@+id/myspinner" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/list_selector"  
     android:drawSelectorOnTop="true" /> 

probar esto ..

+1

no se puede utilizar con una ruleta drawSelectorOnTop –

2

Funciona muy bien !!

  • diseño declarar con vista al texto con el color deseado (y otros atributos que desea cambiar)
  • el id de la Textview debe ser texto1 (porque esto es el ID que se declaran en el diseño predeterminado en R.android para su spinner)
  • dan a este diseño en su adaptador spinner

por ejemplo:

  • en res \ layout \ custom_spinner_item.xml poner esto:

    TextView xmlns:android="http://schemas.android.com/apk/res/android" 
           android:id="@android:id/text1" 
           android:layout_width="match_parent" 
           android:layout_height="wrap_content" 
           android:background="#B2B5B7" 
           android:gravity="center_horizontal" 
           android:textSize="20dp" 
    

entonces este diseño para el adaptador:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
     MyActivity.this, 
     R.layout.custom_spinner_item, strings); 
  • entonces este adaptador a su spinner
8

uso androide: popupBackground =" @ drawable/Yourxmlfile.xml "en su declaración spinner de xml.

Por ej.

<Spinner 
     android:id="@+id/spinner3" 
     android:layout_width="fill_parent" 
     android:layout_height="40dp" 
     android:layout_gravity="center" 
     android:layout_weight="50" 
     android:background="@drawable/gradient_spinner" 
     android:gravity="center" 
     android:paddingLeft="40dp" 
     android:popupBackground="@drawable/radialfront" 
     > 
+1

¡Esto funcionó para mí! – Nischal

Cuestiones relacionadas