根据Android 文档,Spinner 小部件支持 Material Design 风格。
所以我决定在我的应用程序中使用它,将它放在工具栏的顶部。
布局/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);
}
}
在棒棒糖微调器和下拉菜单上看起来不错,尽管下拉菜单的背景颜色是黑色的,而菜单下拉菜单是白色的。我想这app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
不会传播到微调器。
安卓5.0
现在最大的问题是在 Android 4.x 中,下拉背景颜色为白色(popupTheme 已传播?),而微调器旁边的图标为黑色。
安卓 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 上的弹出窗口,它有黑色背景和白色文本,但我想它可以通过自定义布局来解决。如果没有人提供完整的答案,我将自己做并标记为已接受。