Próbowałem zastosować efekt fali na Spinner przedmiotów rozwijanej tak:odzew na pozycji rozwijanych Spinner kolorowym tle (AppCompat-V7 V21)
activity.java
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.array_name, R.layout.simple_spinner_dropdown_item);
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
Spinner mSpinner = (Spinner) findViewById(R.id.spinner);
mSpinner.setAdapter(adapter);
simple_spinner_dropdown_item. xml
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView 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="@drawable/spinner_ripple"
android:ellipsize="marquee"
android:gravity="center_horizontal"
android:padding="10dip"
android:singleLine="true"
android:textSize="14sp" />
spinner_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<ripple android:color="?android:attr/colorControlHighlight">
<item><shape>
<solid android:color="@android:color/white" />
</shape>
</item>
</ripple>
</item>
</selector>
ale na liście rozwijanej działa tylko dla pierwszego elementu i tylko wtedy, gdy wybrano element jest inny niż pierwszy. We wszystkich innych przypadkach wypełnia element tła kolorem (bez efektu marszczenia). Gdzie jest źle mój kod?
już próbował: robi praca ustawić stały kolor na tle układu poz rozwijana i przenieść efekt fali pod elementu Spinner, tak:
simple_spinner_dropdown_item.xml
<?xml version="1.0" encoding="utf-8"?>
<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="@android:color/white"
android:ellipsize="marquee"
android:gravity="center_horizontal"
android:padding="10dip"
android:singleLine="true"
android:textSize="14sp" />
activity_layout .xml
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:dropDownSelector="@drawable/spinner_ripple" />
W ten sposób efekt marszczenia na białym tle jest przenoszony na poziomie motywu: działa, ale działa dla wszystkich spinnerów w mojej aplikacji. Tak więc nie mogę mieć pojedynczego pokrętła z efektem marszczenia na jego własnym tle innym niż ten motyw. – GPack
To niefortunne, ale z powodu błędu Androida jest to jedyny sposób, chyba że chcesz podklasować klasę spinner i spróbować zaimplementować obejście. – stealth
Btw, dlaczego chcesz mieć jeden spinner różni się od innych? – stealth