SearchViewの項で、actionViewClassにSearchViewを指定することで、MenuItemに対してSearchViewを紐づけて、アイテムを押すとSearchViewの検索ボックスが開いたり、閉じたりと出来た。
これだと、1つのViewクラスしかMenuItemに紐づけられないが、actionLayoutを使うと、XMLで定義した複数のViewを持つレイアウトを丸々1つのMenuItemに紐づけられる。
MenuItemから、そのレイアウトのViewを拾うのがMenuItem.getActionView。
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達が表示される。
虫眼鏡がSearchView、右の入力がEditText。
わかりにくいけど虫眼鏡を押してSearchViewを表示した状態。EditTextは表示されていない。
EditTextにフォーカスを合わせた場合。
Closeボタンを押すとこれが出る。
アイコンか左のポッチを押すと閉じられる。
Sample/android/MenuItem/getActionView/src/MenuItem at master · bg1bgst333/Sample · GitHub