いくつかの実験で、私は何とか達成したいことの一部を得ることができました。これが最善のアプローチかどうかはわかりませんが、うまくいきました。
スピナーが画面の右端に表示されないのは、そのスペースがメニュー項目用に予約されているためであることがわかりました。私がメニュー項目を使用しなかった元々の理由は、古いデバイスではメニューボタンを押すと、画面の下部に項目が表示されるためです(私が望んでいたものではありません)。しかし、私は回避策を見つけました。
私は最初にXMLでメニューを作成しました。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/spinner_menu_item"
android:showAsAction="always"
android:actionLayout="@layout/spinner" />
</menu>
および"@layout/spinner"
:
<?xml version="1.0" encoding="utf-8"?>
<com.actionbarsherlock.internal.widget.IcsSpinner xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinner_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
次に、onCreateOptionsMenuで:
getSupportMenuInflater().inflate(R.menu.basic_menu, menu);
MenuItem item = menu.findItem(R.id.spinner_menu_item);
spinnerMenu = (IcsSpinner)item.getActionView();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MyActivity.this, android.R.layout.simple_dropdown_item_1line, menuItems);
spinnerMenu.setAdapter(adapter);
spinnerMenu.setOnItemSelectedListener(new IcsAdapterView.OnItemSelectedListener() {}
そして最後に、次のようにメニューボタンをオーバーライドしました。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
if (keyCode == KeyEvent.KEYCODE_MENU){
spinnerMenu.performClick();
return true;
}
return super.onKeyDown(keyCode, event);
}
これが行わない唯一のことは、単語ではなくアイコンを表示することです。しかし、途中です!これが同様の問題に直面している人の助けになることを願っています。