MenuItem.getActionView

SearchViewの項で、actionViewClassにSearchViewを指定することで、MenuItemに対してSearchViewを紐づけて、アイテムを押すとSearchViewの検索ボックスが開いたり、閉じたりと出来た。
これだと、1つのViewクラスしかMenuItemに紐づけられないが、actionLayoutを使うと、XMLで定義した複数のViewを持つレイアウトを丸々1つのMenuItemに紐づけられる。
MenuItemから、そのレイアウトのViewを拾うのがMenuItem.getActionView。

MenuItem  |  Android Developers

res/menu/main.xmlは、

actionLayoutにlayout_menu_item_search。
collapseActionViewで開いたり閉じたりできる。

layout_menu_item_search.xmlは、

LinearLayoutの中に、ButtonとSearchViewとEditTextと豪華に詰め込んでいる。

MainActivity.javaは、

アクションバーにレイアウトを敷くとなると、タイトルとアイコンが邪魔なので、非表示にしてる。
menuItemSearch.getActionViewで取得できるのは、layout_menu_item_search.xmlの一番外側のLinearLayout。
あとは、そこからfindViewByIdでViewを取得し、イベントとかをセットしていく。

最初アイコンだけ
最初アイコンだけ

最初アイコンだけ。

押すとアクションバーいっぱいにView達が表示される。
押すとアクションバーいっぱいにView達が表示される。

押すとアクションバーいっぱいにView達が表示される。
虫眼鏡がSearchView、右の入力がEditText。

わかりにくいけど虫眼鏡を押してSearchViewを表示した状態。EditTextは表示されていない。
わかりにくいけど虫眼鏡を押してSearchViewを表示した状態。EditTextは表示されていない。

わかりにくいけど虫眼鏡を押してSearchViewを表示した状態。EditTextは表示されていない。

EditTextにフォーカスを合わせた場合。
EditTextにフォーカスを合わせた場合。

EditTextにフォーカスを合わせた場合。

Closeボタンを押すとこれが出る。
Closeボタンを押すとこれが出る。

Closeボタンを押すとこれが出る。

アイコンか左のポッチを押すと閉じられる。
アイコンか左のポッチを押すと閉じられる。

アイコンか左のポッチを押すと閉じられる。

Sample/android/MenuItem/getActionView/src/MenuItem at master · bg1bgst333/Sample · GitHub