古いActionBarスタイルのナビゲーションのようにToolbar
にスピナーを入れようとしていますが、私のテーマはこれです
<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>
しかし、私のスピナーは黒ですが、他のすべてのアイコンとオーバーフローメニューは白なので、見た目が悪いです
これを使ってスピナーのスタイルを変えてみた
<style name="ToolbarSpinnerTheme" parent="Theme.AppCompat">
<item name="Android:spinnerItemStyle">@style/TextAppearanceSpinnerItem</item>
</style>
<style name="TextAppearanceSpinnerItem">
<item name="Android:textColor">#FFFFFF</item>
</style>
これが私のツールバーのスタイルです
<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);
しかし、常に黒のままです。 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)
Arrayadapterを作成するとき、これの代わりにgetApplicationContextを実行する必要があります。
SpinnerAdapter mSpinner = ArrayAdapter.createFromResource(getApplicationContext(), R.array. action_bar_spinner, Android.R.layout.simple_spinner_dropdown_item);
新しいレイアウトファイルを作成します。
<CheckedTextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
Android:singleLine="true"
Android:layout_width="match_parent"
Android:layout_height="?android:attr/listPreferredItemHeight"
Android:ellipsize="Marquee"
Android:textColor="#000000"/>
次に、コードを次のように変更します。
ArrayAdapter mAdapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array. action_bar_spinner, Android.R.layout.simple_spinner_dropdown_item);
mAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
mode.setAdapter(mAdapter);
次のようにXMLファイルにスピナーを入れてみましたか?
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_height="?attr/actionBarSize"
Android:layout_width="match_parent"
Android:background="?attr/colorPrimary">
<Spinner
Android:id="@+id/spinner_nav"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</Android.support.v7.widget.Toolbar>
また、次のようにタイトルを無効にします。
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
答えはChris Banesからです: https://stackoverflow.com/a/26511653/27677
私は次のようにします:
navigation_toolbar.xml
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/toolbar"
Android:layout_width="fill_parent"
Android:layout_height="?attr/actionBarSize"
Android:layout_alignParentLeft="true"
Android:layout_alignParentTop="true"
Android:background="?attr/colorPrimary"
Android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
</Android.support.v7.widget.Toolbar>
MainActivity.Java
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.pass_type, R.layout.layout_drop_title);
adapter.setDropDownViewResource(R.layout.layout_drop_list);
Spinner mNavigationSpinner = new Spinner(getSupportActionBar().getThemedContext());
mNavigationSpinner.setAdapter(adapter);
getToolbar().addView(mNavigationSpinner);
カスタムスピナーアイテムレイアウト、layout_drop_title
およびlayout_drop_list
layout_drop_title.xml
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?attr/spinnerDropDownItemStyle"
Android:singleLine="true"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:textColor="@color/white"
Android:ellipsize="Marquee"/>
layout_drop_list.xml
<CheckedTextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
Android:singleLine="true"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:ellipsize="Marquee"
Android:background="@color/nliveo_blue_colorPrimary"
Android:textColor="@color/white"/>
Kevinは正しい方向にありますが、本当の答えは、アプリケーションコンテキストを使用するのではなく、アクションバー自体のテーマコンテキストを使用することです。これは、実際には documenation で言及されていますが、それほど強調されていません:
アクションバーに表示するもの(ツールバーのリストナビゲーション用のSpinnerAdapterなど)を拡大する場合は、getSupportActionBar()。getThemedContext()で取得したアクションバーのテーマコンテキストを使用してください。