スピナーをツールバーのメニューの横(メニューの左側)に配置したいのですが、現在、スピナーはメニューの下に表示されています。 onCreateOptionsMenu(Menu menu)
内に何らかの方法で追加する必要がありますか
私の活動:
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>
上記の答えに追加して、アクティビティはonItemSelectedListenerを実装する必要があり、onItemSelectedメソッドで作業を行います。
また、リスニングしているスピナーに、onCreateOptionsMenuで次の行を追加する必要があります。
spinner.setOnItemSelectedListener(this);
これにより、スピナーはアクティビティのonItemSelectedメソッドを呼び出します。