web-dev-qa-db-ja.com

ツールバーのメニューの横にスピナーを追加する方法

スピナーをツールバーのメニューの横(メニューの左側)に配置したいのですが、現在、スピナーはメニューの下に表示されています。 onCreateOptionsMenu(Menu menu)内に何らかの方法で追加する必要がありますか

enter image description here

私の活動:

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

 Spinner spinner = (Spinner) findViewById(R.id.travelType_spinner);
        // Create an ArrayAdapter using the string array and a default spinner layout
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.travelType_array, R.layout.spinner_item);
        // Specify the layout to use when the list of choices appears
        adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
        // Apply the adapter to the spinner
        if (spinner != null) {
            spinner.setAdapter(adapter);
        }

レイアウト:

<Android.support.design.widget.AppBarLayout
        Android:id="@+id/appBarLayout"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:theme="@style/AppTheme.AppBarOverlay">

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

        <Spinner
            Android:id="@+id/travelType_spinner"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            />
    </Android.support.design.widget.AppBarLayout>

Spinner_item.xml

<TextView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:textColor="@color/whiteText"
    Android:textStyle="bold"
    Android:padding="15dp"/>

メニュー項目を追加

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto">
    <item
        Android:id="@+id/spinner"
        Android:title="ActionBar Spinner"
        app:actionViewClass="Android.widget.Spinner"
        Android:background="#ff00"
        app:showAsAction="always" />
</menu>

Java

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.Android_action_bar_spinner_menu, menu);

        MenuItem item = menu.findItem(R.id.spinner);
        Spinner spinner = (Spinner) item.getActionView();

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.spinner_list_item_array, Android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);

        spinner.setAdapter(adapter);
        return true;
    }

または

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="?attr/colorPrimaryDark"
    Android:minHeight="?attr/actionBarSize"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
     >

    <Spinner
        Android:id="@+id/spinner_nav"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" />

</Android.support.v7.widget.Toolbar>
30
Nirav Ranpara

上記の答えに追加して、アクティビティはonItemSelectedListenerを実装する必要があり、onItemSelectedメソッドで作業を行います。

また、リスニングしているスピナーに、onCreateOptionsMenuで次の行を追加する必要があります。

spinner.setOnItemSelectedListener(this);

これにより、スピナーはアクティビティのonItemSelectedメソッドを呼び出します。

0
galamdring