8

ActionBarSherlockを使用しています。特定のユーザー操作に応じて、アクションバーに2つのボタンを表示できるようにしたいと思います。ユーザーの操作は、アクションバーとはまったく関係ありません。ボタンの可視性は、メソッドを呼び出すことによって制御する必要があります。また、これらのボタンをクリックしたときの応答は、私自身のアプリケーションコードによって処理されます。

ボタンは、ここandroid:showAsAction="ifRoom|withText"に示すように、を使用してメニュー項目をアクション項目として定義するときに作成されるボタンと同じように見えるのが理想的です。

私の問題は、私が知る限り、標準ActionBarAPIには、アクションアイテムボタンを自由に表示または非表示にするメカニズムがないことです。メニューアイテムを定義できるonCreateOptionsMenu()のは、もちろんシステムによって呼び出されるときだけです。

私の信念は、このようなボタンを追加して自由に表示/非表示にする唯一の方法は、それらのカスタムレイアウトを作成し、.setCustomView()それらをアクションバーに配置することです。人々は一般的にそれに同意しますか、それとも私が見逃したものがありますか?

を使用する場合は.setCustomView()、ActionBarSherlockが属性を持つメニュー項目に対して表示するアクション項目ボタンと同じようにボタンを表示したいと思いますandroid:showAsAction="ifRoom|withText"。これを行うために、ActionBarSherlockライブラリ内のどの特定のテーマ、スタイル、またはレイアウトを使用する必要があるかを誰かにアドバイスできますか?私はすでにを使用しようとしましたが、このレイアウトを膨らませようとすると、レイアウトに含まれているを膨らませようとすると、にR.layout.abs__action_menu_item_layout関連する例外が発生します。colorStateListCapitalizingButton

4

3 に答える 3

11

インスタンスsetVisibilityを呼び出すことができます。MenuItem

ドキュメントには、「次にonCreateOptionsMenu()が呼び出されるまで、メニュー(およびメニューから作成されたアイテム)を安全に保持し、必要に応じて変更を加えることができます」と記載されています。

于 2012-07-22T19:21:40.767 に答える
9

これらの2つのボタンにメニュー項目のルックアンドフィールを持たせたい場合は、それらをメニュー項目にする必要があります。メニュー項目はでしか定義できないという仮定は正しくありません。これは、メニューが表示される直前に毎回onCreateOptionsMenu()呼び出される、というメソッドもあるためです。onPrepareOptionsMenu()アクティビティのメソッドと一緒にinvalidateOptionsMenu()、現在の状態をリアルタイムで反映するメニューデータを簡単に作成できます。

別の方法は、個々のMenuItemオブジェクトへの参照を保持することです。ドキュメントには、それらを保持するための保存が記載されており、必要に応じてそれらの可視性を変更します。あなたはまだメニューを更新するために電話しなければならないかもしれません-invalidateOptionsMenu()私は頭のてっぺんから思い出せません。(編集:ジェイクはこれで私を打ち負かしました)

個人的には、最初のアプローチを好みます。これは、メニュー関連のすべてのロジックをグループ化して、可視性が何らかの状態/モデルに基づいているためです。2番目のオプションは、現在のコードによっては実装がより簡単な場合がありますが、メニューがいたるところに表示される場合があります。

于 2012-07-22T19:28:42.023 に答える
2

デモサンプルを確認しましたか?

彼らは「フィーチャートグル」にこの機能を持っています。

于 2012-07-22T19:29:30.443 に答える