2013-04-24 14 views
15

Szukałem tej odpowiedzi, ale się nie udało.Jak zmienić kolor tła listy spinnerów w Androidzie

Dynamicznie tworzę nową przędzarkę, jak mogę zmienić kolor tła mojej listy?

bieżący kolor tła jest jakiś ciemnoszary:

two muppets kiedy jestem zmieniając atrybut turbinki za tło do białego, ja dostaję to niepożądana sytuacja:

two muppets chcę go mieć przejrzysty w działaniu i tylko wtedy, gdy otwieram spinner (naciśnij na nim), chcę, aby tło było białe.

Oto kod, który tworzę z tarczy z:

tworzę adapter z:

mAdapter = new ArrayAdapter<String>(getApplicationContext(), 
            R.layout.spinner, R.id.Language, lang); 
    LinearLayout layoutHolder = 
         (LinearLayout)findViewById(R.id.RegisterFormLayout); 
    Spinner spinner = new Spinner(getApplicationContext()); 
    LayoutParams layParams= new 
       Spinner.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,  
             ViewGroup.LayoutParams.WRAP_CONTENT); 
    spinner.setLayoutParams(layParams); 
    spinner.setAdapter(mAdapter); 
    spinner.setOnItemSelectedListener(new myOnItemSelectedListener()); 
    if (lang != null) 
     spinner.setSelection(lang.intValue()); 
    spinnerList.add(spinner); 
    layoutHolder.addView(spinner); 

moim układzie spinner.xml jest:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:id="@+id/SpinnerLayout"> 

<TextView 
    android:id="@+id/Language" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textColor="#ffffff" 
    android:background="#00ffffff" 
    android:padding="5dp" /> 
</LinearLayout> 

jakieś sugestie?

+0

Czy masz definicje układów dla każdego elementu listy? –

+1

no ... to tylko lista, która jest dołączona do ArrayAdapter (mAdapter) –

+1

@NoamMizrachi Sprawdź moją odpowiedź tutaj http://stackoverflow.com/questions/15299194/how-to-change-the-text-background-color- of-a-opened-spinner-on-android – Pragnani

Odpowiedz

11

Rozwiązałem go!

Rozwiązaniem tego problemu jest dodanie kod podczas tworzenia tarczy Dynamicznie

spinner.setPopupBackgroundResource(R.drawable.spinner); 

i tworzenia spinner.xml pod rozciągliwej katalogu:

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <solid android:color="#ffffff" /> 
</shape> 

To rozwiązanie wymaga poziomu API 16 i powyżej.

wynik:

two muppets

+1

Ya u r rt. spinner.setPopupBackgroundResource (R.drawable.spinner); Minimalny poziom API to 16. Aby pracować na wszystkich poziomach, ustaw go z poziomu Androida: popupBackground = "@ android: color/red – Praveen

1

w moim spinner.xml

wykorzystuje to w LinearLayout: android:background="#ffffff"

+1

Otrzymuję wynik podobny do mojego drugiego obrazu mojego pytania. Chcę, żeby było przejrzyste w działaniu i tylko wtedy, gdy je naciskam, tło będzie białe. –

21

nie jestem pewien o tej odpowiedzi, można zaakceptować lub zignorować.

Myślę, że ten wymóg nie jest możliwy dzięki zmianom tematu. Ponieważ konstruktor Spinner przypisuje wartość atrybutu popupBackground tylko wtedy, gdy napisałeś w układzie xml, w przeciwnym razie użyje domyślnej wartości motywu. jak poniżej

<Spinner 
    android:id="@+id/spinner1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:popupBackground="@android:color/holo_green_dark" /> 

// justtry zmieniając podręcznego tle

+2

Dodaje nieprzyjemną czarną obwódkę wokół niej – StarWind0

2

Aby rozwiązać problem, spróbuj tego.

android:popupBackground="#00826b" 
Powiązane problemy