スキップしてメイン コンテンツに移動

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

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()メソッドを叩くようにしてやれば、メニューが閉じます。


コメント

このブログの人気の投稿

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Eclipseで一通り基本的なGitを使ってみる

備忘録的にまとめておきたいと思います。おかしな点があればご指摘いただければ幸いです。 目次 環境 プロジェクト作成~初コミットまで コミットの履歴&差分を見る 元に戻す ブランチについて ブランチを作成してみる ブランチを統合するには マージする Rebaseする ローカルリポジトリからプロジェクトを取り込む コミットしたメッセージの修正 環境 Eclipse IDE for Java Developers:Juno Service Release 1 Git:上記Eclipseのプリインストール版

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }