web-dev-qa-db-ja.com

ツールバーのスピナースタイルを変更する

古い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>

しかし、私のスピナーは黒ですが、他のすべてのアイコンとオーバーフローメニューは白なので、見た目が悪いです

enter image description here

これを使ってスピナーのスタイルを変えてみた

<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)
18
tyczj

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

8

私は次のようにします:

enter image description here

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"/>
21
Mao

Kevinは正しい方向にありますが、本当の答えは、アプリケーションコンテキストを使用するのではなく、アクションバー自体のテーマコンテキストを使用することです。これは、実際には documenation で言及されていますが、それほど強調されていません:

アクションバーに表示するもの(ツールバーのリストナビゲーション用のSpinnerAdapterなど)を拡大する場合は、getSupportActionBar()。getThemedContext()で取得したアクションバーのテーマコンテキストを使用してください。

9
Gábor