根据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>
Run Code Online (Sandbox Code Playgroud)
活动主题
<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>
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
在棒棒糖旋转器和下拉列表看起来很好,虽然下拉背景颜色是黑色比菜单下拉列表是白色.我猜这app:popupTheme="@style/ThemeOverlay.AppCompat.Light"不会传播到微调器.
Android 5.0

现在最大的问题是Android 4.x下拉背景颜色是白色(popupTheme传播?)和微调器旁边的图标是黑色.
Android 4.4

我试图把一个微调器放在我Toolbar的旧ActionBar风格导航中,我的主题就是这个
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/color_primary</item>
<item name="colorPrimaryDark">@color/color_primary_dark</item>
<item name="colorAccent">@color/color_primary</item>
</style>
Run Code Online (Sandbox Code Playgroud)
但我的微调器是黑色的,而所有其他图标和溢出菜单都是白色的,所以它看起来很糟糕

我尝试使用它来改变微调器的样式
<style name="ToolbarSpinnerTheme" parent="Theme.AppCompat">
<item name="android:spinnerItemStyle">@style/TextAppearanceSpinnerItem</item>
</style>
<style name="TextAppearanceSpinnerItem">
<item name="android:textColor">#FFFFFF</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这就是我的工具栏的样式
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/modes"
android:minWidth="150dp"
android:gravity="bottom"
style="@style/ToolbarSpinnerTheme"/>
</android.support.v7.widget.Toolbar>
final Spinner mode = (Spinner)findViewById(R.id.modes);
SpinnerAdapter mSpinner = ArrayAdapter.createFromResource(this, R.array.action_bar_spinner, android.R.layout.simple_spinner_dropdown_item);
mode.setAdapter(mSpinner);
Run Code Online (Sandbox Code Playgroud)
但它总是保持黑色.如何在保持与主题相同的下拉样式主题的同时将微调器箭头和文本更改为白色Light?
更新4.4箭头修复:
我让箭头变成白色的唯一方法是以编程方式添加微调器,而不是在xml中添加,因此它看起来像这样
final ArrayAdapter spinnerAdapter = ArrayAdapter.createFromResource(getSupportActionBar().getThemedContext(),
R.array.main_navigation_list, R.layout.spinner_text);
spinnerAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
mNavigationTags = getResources().getStringArray(R.array.main_navigation_list);
mNavigationSpinner = new Spinner(getSupportActionBar().getThemedContext());
mNavigationSpinner.setAdapter(spinnerAdapter);
mNavigationSpinner.setOnItemSelectedListener(this);
mToolbar.addView(mNavigationSpinner)
Run Code Online (Sandbox Code Playgroud) 我通过AppCompat使用工具栏(而不是ActionBar).我想用图标替换工具栏的标题(app/actity名称),但我不知道如何.
我的图标只是使用非标准字体的文本,所以我想它可能在Material Design中被允许.
setListNavigationCallbacks用于允许用户通过ActionBar轻松切换当前屏幕的不同视图,如此处和此处所示.
我注意到它从API21(Lollipop)开始被弃用,并且所有文档都说要寻找其他导航解决方案,但它并没有说出哪一个最适合同一点的导航解决方案:
不推荐使用此方法.不建议使用操作栏导航模式,内联工具栏操作栏不支持.请考虑使用其他常见的导航模式.
与此函数相关的所有其他函数/类也不推荐使用,例如setNavigationMode,OnNavigationListener,ActionBar.NAVIGATION_MODE_LIST.
导航抽屉用于导航不同的屏幕,而不是同一屏幕的不同视图.
添加一个动作项,提供一种在模式之间切换的方法,但这有点奇怪......
使用ViewPager,但这也很奇怪,因为它没有真正切换视图,而且需要更多的空间.
使用标签,但我认为这也在某种程度上被弃用,而且这种方式需要更多的空间.
什么应该是这种导航方式的最佳替代方案?
navigation android deprecated android-actionbar android-5.0-lollipop
我需要在我的Android应用程序的顶部菜单栏中添加一个微调器,如下所示:

在Android 5.0之前,我只是使用:
final android.app.ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false); // DEPRACATED
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)
Run Code Online (Sandbox Code Playgroud)
但该方法已被弃用.我已经浏览了所有示例:http://developer.android.com/samples/ui.html但是没有一个人有一个微调/下拉菜单来基于我的代码.
鉴于不推荐使用NAVIGATION_MODE_LIST,如何添加与Android 5.0兼容的微调器以及所有以前的版本?
更新:在我的代码中可以看到添加工具栏后,发生错误,因为它注意到即使它无法看到导入android.support.v7.widget.Toolbar; 清楚列出
