Android、Java、Web系、Linux、マラソン等の備忘録

2014/04/11

AndroidのActionbarのDropdownメニューについて調べたことなど

0 件のコメント

1.公式

Action Bar | Android Developers
http://developer.android.com/guide/topics/ui/actionbar.html

2.ドロップダウンメニュー項目の背景色やラジオボタンの表示など

Customizing the Action Bar | Android Developers Blog
http://android-developers.blogspot.jp/2011/04/customizing-action-bar.html

3.ActionBarSherlockを使ったDrop-down Navigationのカスタマイズ

ソースも一式あるので分かりやすいです。

Dan Dar3: March 2013
http://dandar3.blogspot.jp/2013_03_01_archive.html

4.Drop-down NavigationをActionBarの右端に表示するには

android - How can I position my actionbar list navigation on the right side? - Stack Overflow
http://stackoverflow.com/questions/15729132/how-can-i-position-my-actionbar-list-navigation-on-the-right-side


まとめ

メニュー項目の背景色を変えたりアイコンを表示させたり、ラジオボタンにしたりはxml等をいじればいけるようですが、オリジナルにカスタマイズしたViewをメニュー項目へ入れるとなると調べた限りではやり方が見つかりませんでした。

図1 ここにカスタマイズしたViewを入れたい

ActionBarのメニューでカスタマイズ性の高いのは、Drop-down Navigationを使うのが良いようです。3番目のリンクにカスタマイズのサンプルがあります。図1の場合と違うのはこのメニューはActionBarのタイトル部分がDrop downメニューとなります。

図2 タイトルの部分にメニューが入る


これを、図1のようにActionBarの右端へ表示させるには、actionbarsherlockのIcsSpinnerを子にもつIcsLinearLayoutへsetGravity()でGravity.RIGHTを指定してやれば右端になります。4番目のリンクに掲載されているサンプルです。

また、そのサンプルはArrayAdapterで作成したものをスピナーへsetAdapterしているので、3のサンプルNavigationListAdapterクラスと組み合わせれば、カスタマイズしやすくなるのではないでしょうか。(※単に組み合わせるだけなら動かして確認してみました)

図2のものを右端に表示させるので三角のアイコンも表示されてしまうのですが、


actionbarsherlockのソースを辿れば消し方もわかるのではと思います。まあ表示されてても大きく問題ないと思います。

追記:2014/04/12

こんな感じにカスタマイズできました。

メニューの項目の高さが均一でないため、dividerを消す必要があったのですが、xmlをいじるのがややこしくて、Stack Overflowのある方によればカスタムしたViewを入れるなら、ArrayAdapterに複数入れるのではなくて、1つの項目に1枚のレイアウトを入れてるぜ!とあったので、1枚のレイアウト中に勝手に線でも引いて、リストぽくしてみました。

ただ、この場合、項目をタッチしてもメニューが閉じなくなります。IcsSpinnerのonDetachedFromWindow(ただしprotected)を叩いてやれば閉じるとのことで、以下のようにしました。
メニューの項目のクリックイベントでこれのclose()メソッドを叩くようにしてやれば、メニューが閉じます。


0 件のコメント :

コメントを投稿