Wie kann ich den Spinner-Stil für Android 4.x oben auf der Symbolleiste reparieren?
Gemäß Android-Dokumentation, Material Design-Stil wird für das Spinner-Widget unterstützt.
So habe ich beschlossen, es in meiner App zu verwenden und es oben auf der Symbolleiste zu platzieren.
layout / activity_base.xml
<android.support.v7.widget.Toolbar
android:id="@+id/my_awesome_toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="5dp"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</android.support.v7.widget.Toolbar>
Aktivitätsthema
<style name="BaseAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/omni_primary_color</item>
<item name="colorPrimaryDark">@color/omni_primary_color_dark</item>
<item name="colorAccent">@color/omni_accent_color</item>
</style>
BaseActivity.java
public class BaseActivity extends ActionBarActivity {
@InjectView(R.id.my_awesome_toolbar)
Toolbar mToolbar;
@InjectView(R.id.spinner)
Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
ButterKnife.inject(this);
//setup toolbar
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
mToolbar.setNavigationIcon(R.drawable.ic_action_navigation_menu);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(mToolbar.getContext(),
R.array.planets_array, R.layout.support_simple_spinner_dropdown_item);
adapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
}
}
On Lollipop Spinner und Dropdown sehen gut aus, obwohl die Dropdown-Hintergrundfarbe schwarz ist, verglichen mit der Menü-Dropdown-Farbe, die weiß ist. Ich vermute, dassapp:popupTheme="@style/ThemeOverlay.AppCompat.Light"
wird nicht an den Spinner weitergegeben.
Android 5.0
Jetzt ist das große Problem bei Android 4.x, bei dem die Dropdown-Hintergrundfarbe weiß (popupTheme propagiert?) Und das Symbol neben dem Drehfeld schwarz ist.
Android 4.4
Aktualisiere
Ich habe bemerkt, dass EinstellungseigenschaftcolorControlNormal
wirkt sich auf das Filtersymbol des Drehfelds aus. Wenn jemand herausfindet, wie er das für Spinner nutzen kann (ohne andere Inhaltssteuerelemente zu ändern), hätte ich meine Lösung, die dieses Ergebnis mit @Sven answer kombiniert.
Aktualisiere
Die folgende Änderung behebt das Problem für Drehfeldtext und Popup-Farbe. Das einzige Problem für die endgültige Lösung ist das Filtersymbol.
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getSupportActionBa,r().getThemedContext(),
R.array.planets_array, R.layout.support_simple_spinner_dropdown_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Aktualisiere
Ich habe festgestellt, dass das Filtersymbol tatsächlich ein Teil von @ isandroid:background
wurde für den Spinner angegeben und ist transparent. Das Bereitstellen eines eigenen Hintergrunds würde das Problem beheben, z. B.
<item name="android:background">?android:selectableItemBackground</item>
Geheimnis gelüftet
Das letzte Puzzleteil ist das Popup auf Android 5 mit schwarzem Hintergrund und weißem Text, aber ich denke, es kann mit einem benutzerdefinierten Layout gelöst werden. Wenn niemand eine vollständige Antwort liefert, werde ich es selbst tun und als akzeptiert markieren.