PhoneGap(Cordova)にAndroidネイティブのメニューを実装するパーツです。今のところAndroid専用なのでiOSプロジェクトには対応していません。
使用にはNode.jsとnpmモジュールのdom-jsが必要です。
-
Node.jsをインストール後、npmモジュールのdom-jsをグローバルインストールします。
$ npm install -g dom-js
-
native-menu.json.example
を参考に、PhoneGap(Cordova)プロジェクトのrootにnative-menu.json
を作成します。 -
hooks
ディレクトリの中身をPhoneGap(Cordova)プロジェクトのrootにあるhooks
ディレクトリにコピーします。 -
phonegap build
コマンドやcordova build
コマンドでプロジェクトをビルドして作成したアプリを実行してメニューボタンを押すとネイティブメニューが表示されるようになります(run
コマンドではhooks
のスクリプトが走らないので、メニューを新規作成したり変更した後の初回は必ずbuild
コマンドを実行してください)。
PhoneGap(Cordova)プロジェクトのhooks
ディレクトリに実行可能ファイルを置いておくと様々なタイミングでそのファイルを実行してくれます。今回の例で言うとプロジェクトのビルド直前にbefore_build
ディレクトリのnative-menu.js
が実行されるようになります。
native-menu.js
ではplatforms/android/src/アプリのメインソース
に動的にメニューを作成するコードを書き加える処理と、メニューに表示される項目の内容を記述したmenu.xml
をplatforms/android/res/menu
ディレクトリに作成します。その際にプロジェクトのrootに置いたnative-menu.json
を読み込んでメニュー内容を取得します。
メインソースの内容を正規表現を使用して直接書き換えるという割と危険な事をしています。場合によってはメインソースを壊してしまうかもしれません。何回か実行して問題がないことを確認できるまではメインソースのバックアップを取っておいてから実行してください。
以下の3項目でメニュー項目1つ分となります。それを配列で指定してください。
-
id
どのメニュー項目が選択されたのかをJavaScript側のイベントで判定するための識別子です。各メニュー項目で重複しないようにしてください。
-
title
メニューに表示される文字列です。
-
icon
メニューに表示されるアイコンファイル名です。ここで指定したファイル名と同名のPNGアイコンファイルを
platforms/android/res/drawable
ディレクトリに置いてください。例)
ic_menu_help
と指定した場合はplatforms/android/res/drawable/ic_menu_help.png
がメニューアイコンとして使用される。また、
platforms/android/res/drawable
にアイコンを置いていない場合はAndroidデフォルトのリソースに該当するアイコンがあるかチェックして、あればそれを使用します。デフォルトのメニューリソースIDはこちらを参照してください(ただし、機種のメーカーによってアイコンがあったりなかったりするようなのでPNGファイルを自前で用意した方が安全と思われます)。
optionselect
イベントが発生するので、その中で引数で渡されたeventオブジェクトのitemId
を参照するとnative-menu.json
で指定したidが入っています。
document.addEventListener('optionselect', function (event) {
if (event.itemId === 'help') {
...
}
});
PhoneGap3.4.0での動作を確認しています。それ以下のバージョンでは正常に動作しない可能性があります。
※PhoneGap3.3と3.4ではディレクトリ構成も変わっているようなので3.3でも正常に動かないかもしれません。
- 初版リリース
MIT licenseで配布します。
© 2014 ktty1220