Android開発のActionBar詳細


intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

注意:アプリケーションアイコンを使用してホームページに戻る場合は、Android 4から注意してください.0(APIレベル14)から、setHomeButtonEnabled(true)メソッドを呼び出すことで、このアイコンが操作項目として機能することを確認する必要があります(以前のバージョンでは、デフォルトでは、このアイコンは操作項目として機能します).
アプリケーションの親ページへのナビゲート
従来のロールバックナビゲーション(ユーザーをタスク履歴の前のウィンドウに戻す)の補足として、action barアイコンに上位ページへのナビゲーション機能を提供させ、ユーザーをアプリケーションの上位ページに戻すことができます.たとえば、現在のページのアプリケーション階層が比較的深いページでは、タッチアプリケーションアイコンは前のページ(現在のページの親ページ)に戻る必要があります.
図4.Emailアプリケーションの標準アイコン(左)と上向きナビゲーションアイコン(右)です.アップ指示が自動的に追加されます.
例えば、図5は、ユーザが1つのアプリケーションから別のアプリケーションに属するActivityに移動した場合の「ロールバック」ボタンの動作を示す.
ただし、メールを編集した後、Emailアプリケーションにとどまる場合は、前のActivityに戻るのではなく、ユーザーをEmailアプリケーションでメールページを編集する親ページにナビゲートできます.図6は、ユーザがEmailアプリケーションにアクセスした後、ロールバックボタンを押すのではなく、操作バーアイコンを押して上へナビゲートするシーンを示している.
図6.PeopleアプリケーションからEmailアプリケーションに移行した後、上へナビゲートする動作.
アプリケーションアイコンが上に移動できる場合は、ActionBarでSetDisplayHomeAsUpEnabledtrue(true)メソッドを呼び出します.
protected void onCreate(Bundle savedInstanceState) {     
    super.onCreate(savedInstanceState);     
         
    setContentView(R.layout.main);     
    ActionBar actionBar = getActionBar();     
    actionBar.setDisplayHomeAsUpEnabled(true);     
    ...     
}

ユーザがこのアイコンに触れるとandroidが呼び出される.R.id.home IDのonOptionsItemSelected()メソッド.
IntentオブジェクトでFLAG_を使用することを忘れないでください.ACTIVITY_CLEAR_TOP IDは、この親Activityが存在しないように、新しいインスタンスを作成します.たとえば、FLAGを使用しない場合はACTIVITY_CLEAR_TOPタグは、上に移動してから戻るボタンを押すと、実際にアプリケーションの下のページにユーザーが持ち込まれるのがおかしいです.
注意:多くのユーザーがアプリケーション内の現在のActivityのパスに到達できる場合は、アップアイコンは現在のActivityの実際の起動パスに沿って徐々にナビゲートする必要があります.
操作ウィンドウの追加
操作ウィンドウは、操作項目ボタンの代わりに操作バーに表示されるビジュアルコンポーネントです.たとえば、検索用のオプションメニュー項目がある場合は、図7に示すように、操作バーの検索ボタンの代わりにSearchViewクラスを使用できます.
図7.折りたたみ(上)と展開(下)の検索ウィンドウの操作バー
メニューリソースのアイテムに対してアクションウィンドウを宣言するには、android:actionLayoutプロパティとandroid:actionViewClassプロパティを使用して、レイアウトリソースまたは使用するビジュアルコンポーネントクラスをそれぞれ指定します.例:
     
     
         

Android:showAsActionプロパティには、オプションの「collapseActionView」プロパティ値も含まれます.この値は、ユーザーがこのボタンを選択すると、この操作ウィンドウが展開されるボタンに折り畳まれるべきだと宣言します.そうでなければ、この操作ウィンドウはデフォルトで表示され、適用されない場合でも、操作バーの有効なスペースを占めます.
操作ウィンドウにイベントを追加する必要がある場合は、onCreateOptionsMenu()コールバック実行中に行う必要があります.メニュー項目ID付きfindItem()メソッドを呼び出してメニュー項目を取得し、getActionView()を呼び出してウィンドウ内の要素を操作できます.たとえば、上記の例の検索ウィンドウコンポーネントを取得するには、次の方法を使用します.
@Override 
public boolean onCreateOptionsMenu(Menu menu) {     
    getMenuInflater().inflate(R.menu.options, menu);     
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();     
    // Configure the search info and add any event listeners     
    ...     
    return super.onCreateOptionsMenu(menu);     
}

折りたたみ可能な操作ウィンドウの処理
ビューウィンドウを操作すると、ActivityやFragmentを変更せずに、ユーザーに迅速なアクセスと豊富な操作を提供できます.ただし、操作ウィンドウを表示するのはデフォルトでは適切ではありません.操作バーのスペース(特に小さなスクリーンデバイスで実行される場合)を保証するには、操作ウィンドウを操作項目ボタンに折り畳むことができます.ユーザーがこのボタンを選択すると、操作ウィンドウが操作バーに表示されます.折りたたまれた場合、android:showAsAction="ifRoom"プロパティを定義した場合、システムはこのアイテムをオーバーフローメニューに配置する可能性がありますが、ユーザーがこのメニューアイテムを選択した場合、操作バーに表示されます.Android:showAsActionプロパティに「collapseActionView」プロパティ値を追加することで、操作ウィンドウを折り畳むことができます.
ユーザーがこのアイテムを選択すると、この操作ウィンドウが展開されるので、onOptionsItemSelected()コールバックメソッドでこのメニューアイテムに応答する必要はありません.ユーザーがこのメニュー項目を選択すると、onOptionsItemSelected()メソッドが呼び出されますが、メソッドでtrue(システムに代わってこのイベントを処理したことを示す)を返さない限り、システムは常にこの操作ウィンドウを展開します.
ユーザーが操作バーの「上へ」アイコンを選択したり、戻るボタンを押したりすると、操作ウィンドウが折り畳まれます.
必要に応じて、expandActionView()メソッドとcollapseActionView()メソッドを使用して、操作ウィンドウをコード内で展開または折り畳むことができます.
注意:操作ウィンドウを折りたたむのはオプションですが、SearchViewオブジェクトが含まれている場合は、常にこのウィンドウを折りたたむことをお勧めします.必要に応じて、ユーザーが選択してから展開することをお勧めします.専用の「検索」ボタンを提供している機器でも注意が必要です.ユーザーが「検索」ボタンを押した場合は、この検索ウィンドウを展開し、ActivityのonKeyUp()コールバックメソッドを簡単に書き換え、KEYCODE_を傍受する必要があります.SEARCHタイプのキーイベントを呼び出し、expandActionView()メソッドを呼び出すと、操作ウィンドウを展開できます.
操作ウィンドウの可視性に基づいてActivityを更新する必要がある場合は、OnActionExpandListenerイベントを定義し、setOnActionExpandListener()メソッドでこのイベントを登録し、操作ウィンドウの展開と折り畳み時にこのコールバックメソッドを受け入れることができます.
@Override 
public boolean onCreateOptionsMenu(Menu menu) {     
    getMenuInflater().inflate(R.menu.options, menu);     
    MenuItem menuItem = menu.findItem(R.id.actionItem);     
    ...     
         
    menuItem.setOnActionExpandListener(new OnActionExpandListener() {     
        @Override 
        public boolean onMenuItemActionCollapse(MenuItem item) {     
            // Do something when collapsed     
            return true;  // Return true to collapse action view     
        }     
         
        @Override 
        public boolean onMenuItemActionExpand(MenuItem item) {     
            // Do something when expanded     
            return true;  // Return true to expand action view     
        }     
    });     
}