Согласно документации Android, виджет Spinner поддерживает стиль Material Design.
Поэтому я решил использовать его в своем приложении, разместив его поверх панели инструментов.
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>
Тема деятельности
<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);
}
}
На Lollipop spinner и раскрывающийся список выглядят нормально, хотя цвет фона раскрывающегося списка черный по сравнению с раскрывающимся меню, которое белое. Я предполагаю, что app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
не передается счетчику.
Android 5.0
Теперь большая проблема связана с Android 4.x, где цвет фона раскрывающегося списка белый (popupTheme распространяется?), а значок рядом со счетчиком черный.
Android 4.4
Как я могу правильно установить его в XML или внедрить в код, чтобы он работал как на Android 5, так и на 4? В идеале я хотел бы, чтобы оба выглядели как на Android 5, но с выпадающим списком белого счетчика (например, раскрывающимся меню настроек).
Обновить
Я заметил, что установка свойства colorControlNormal
влияет на значок фильтра счетчика. Если кто-то узнает, как использовать это для Spinner (без изменения других элементов управления содержимым), то я бы предложил свое решение, сочетающее это открытие с ответом @Sven.
Обновить
Следующее изменение устраняет проблему с текстом счетчика и цветом всплывающего окна. Таким образом, единственная проблема с окончательным решением — это значок фильтра.
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getSupportActionBar().getThemedContext(),
R.array.planets_array, R.layout.support_simple_spinner_dropdown_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Обновить
Я обнаружил, что значок фильтра на самом деле является частью android:background
, указанной для счетчика, и он прозрачен. Предоставление собственного фона исправит это, например.
<item name="android:background">?android:selectableItemBackground</item>
Тайна раскрыта!
Последняя часть головоломки — это всплывающее окно на Android 5 с черным фоном и белым текстом, но я думаю, что это можно решить с помощью пользовательского макета. Если никто не даст полный ответ, я сделаю это сам и отмечу как принятый.
getSupportActionBar().getThemedContext()
вместоmToolbar.getContext()
- person Selvin   schedule 05.11.2014