Android documentationによると、Material Design スタイルは Spinner ウィジェットでサポートされています。
そこで、アプリでツールバーの上に配置して使用することにしました。
レイアウト/アクティビティベース.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"
それはスピナーには伝わらないと思います。
アンドロイド 5.0
Android 4.x の大きな問題は、ドロップダウンの背景色が白 (popupTheme が伝播したか?) で、スピナーの横のアイコンが黒であるということです。
アンドロイド 4.4
Android 5 と 4 の両方で動作するように、XML で適切に設定するか、コードに実装するにはどうすればよいですか? 理想的には、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 の黒い背景と白いテキストのポップアップですが、カスタム レイアウトで解決できると思います。誰も完全な回答を提供しない場合は、私が自分で回答し、承認済みとしてマークします。