因此,我决定在我的应用程序中使用它,并将其放置在工具栏顶部。 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 系统中,下拉框和下拉列表看起来都很好,尽管与菜单下拉列表为白色相比,下拉框的背景颜色为黑色。我猜测app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
没有传播到下拉框。Android 5.0
现在关键问题是在 Android 4.x 中,下拉框的背景颜色为白色(是否传播popupTheme?),并且旁边的图标为黑色。
Android 4.4
我该如何在 XML 中设置它或在代码中实现它以使其在 Android 5 和 4 上均可使用?理想情况下,我希望两者都像在 Android 5 上一样,但下拉框是白色的(就像设置菜单下拉列表一样)。
更新
我注意到设置属性colorControlNormal
会影响选项框的筛选图标。如果有人发现如何将其用于下拉框(而不更改其他内容控件),那么我将把这个结果与 @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()
。 - Selvin