11

Sto provando a impostare il colore di sfondo di una finestra popup, ma tutto ciò che ho provato non ha funzionato correttamente.Come posso cambiare il colore di sfondo di una finestra popup?

Questa è la casella di selezione:

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

Quando clicco su di esso, mostra un popup con uno sfondo bianco, e voglio cambiare la situazione.

wich linea di XML che uso per popolare il popup è:

<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> 

e lo sfondo disegnabile 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> 

Aggiunta di uno stato predefinito al xml sopra è ok, ma il controllo principale dello spinner mostra l'oggetto con quel colore di sfondo, e non lo voglio.

Un'altra cosa che ho provato è quello di impostare il colore di sfondo dell'applicazione al nero in 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> 

che sostituisce lo sfondo pop-up troppo, ma ha effetti collaterali indesiderati. C'è un modo per farlo in un modo semplice?

Grazie!

PS: Utilizzo il livello API 10 (2.3.3) e l'attributo android:popupBackground non esiste.

+0

Prova questo http://www.gersic.com/blog.php?id=57 –

risposta

5

Nessuna delle soluzioni di cui sopra ha funzionato per me.

La soluzione stava scrivendo l'adattatore passato al filatore un'implementazione diversa nel metodo getDropDownView per visualizzare un formato diverso con colori personalizzati:

@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

Per qualche ragione questo non funziona su Gingerbread - sfondo del l'articolo sembra essere sovrascritto. In questo caso è più semplice rendere il testo di colore nero. – aleb

+0

+1 perché questa soluzione funziona su API 15 (quella di cui avevo bisogno) mentre spinner.setPopupBackgroundDrawable() funziona solo su 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" /> 

provare questo ..

+1

non è possibile utilizzare drawSelectorOnTop con un filatore –

2

Funziona benissimo !!

  • layout di dichiarare con vista testo con il colore desiderato (e altri attributi si desidera modificare)
  • l'id del textView deve essere text1 (Causa Questo è l'ID che si dichiarano in layout predefinito in R.android per tuo filatore)
  • dare questa disposizione nel vostro adattatore filatore

ad esempio:

  • in res \ layout \ custom_spinner_item.xml mettere questo:

    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" 
    

Poi dare questo layout alla scheda:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
     MyActivity.this, 
     R.layout.custom_spinner_item, strings); 
  • Poi dare questo adattatore al tuo filatore
8

utilizzare Android: popupBackground =" @ drawable/Yourxmlfile.xml "nella dichiarazione del filatore di xml.

Per es.

<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

Questo ha funzionato per me !! – Nischal

Problemi correlati