アプリケーションのコンテキストに基づいて、ActionBarItem を ActionBar からオプション メニューに移動できるようにしたいと考えています。
以下のアクティビティには 2 つのメニュー項目があります。1 つは ActionBar で ALWAYS_SHOW に設定され、もう 1 つは ActionBar に表示しないように設定されています。アクティビティのレイアウトには、ボタンが 1 つ含まれています。このボタンをクリックすると、ActionBar ボタンはオプション メニュー (ActionBar に表示されている場合) に移動するか、ActionBar (オプション メニューにある場合) に移動する必要があります。
このアクティビティは、ハニカムで期待どおりに機能します。ただし、MenuItem.setShowAsAction メソッドを呼び出しても、ICS では効果がありません。MenuItem.setVisible は ICS で ActionBar 項目を表示/非表示にしますが、項目がオプション メニューに移動することはありません。ICSでこれを機能させる方法はありますか?
public class TempProjActivity extends Activity implements OnClickListener
{
Button hideButton;
MenuItem actionbarButton;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
hideButton = (Button) findViewById(R.id.showhidebutton);
hideButton.setOnClickListener(this);
}
boolean visible = true;
@Override
public void onClick(View v)
{
if(visible)
{
actionbarButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
visible = false;
}
else
{
actionbarButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
visible = true;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.optionsmenu, menu);
actionbarButton = menu.findItem(R.id.actionbarbutton);
return super.onCreateOptionsMenu(menu);
}
}
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/actionbarbutton"
android:icon="@drawable/ic_launcher"
android:text="@string/button"
android:showAsAction="always"/>
<item
android:text="@string/extra"
android:showAsAction="never"/>
</menu>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFFFF"
android:orientation="horizontal" >
<Button android:id="@+id/showhidebutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</FrameLayout>