このページの本文へ

車とスマホがつながるSDLの世界 第7回

メニュー画面を表示してみよう

SDL対応アプリ開発環境の構築その3~Android版のSDLのAPIを使いこなす

2019年01月12日 11時00分更新

文● 柴田文彦 編集●アスキー編集部

  • この記事をはてなブックマークに追加
  • 本文印刷

ソフトボタンの操作に応答してアラートを表示する

 以上のプログラムによって配置した2つのソフトボタンのうち、1つめはクリック(タップ)するたびにステートが切り替わるので、アプリの動作モードをすばやく切り替えるためのボタンなどとして利用できるだろう。

 それに対して、もう1つのボタンのイベントリスナーはnullのままで、まだ何も動作を割り当てていなかった。ここでは、そのボタンをクリックすることでアラートを表示するプログラムを追加することにしよう。その場合のアラートは、もちろんスマホ側ではなく、車載機側の画面に表示される。

 アラートを表示するためのAPIは、これまで示したものに比べてもかなりシンプルで、簡単に利用できる。基本的には、まずAlertクラスのオブジェクトを作成し、そのオブジェクトに表示するテキスト、アラートを閉じる条件、ボタンなどをプロパティとして付加する。その後SdlManagerを使って、RPC経由でアラートオブジェクトを車載機に転送するだけでいい。

 アラートには最大3行のテキストを表示できるが、ここでは2行のテキストを設定し、5秒(5000ミリ秒)後に自動的に閉じるようにする。以下にこのアラートを表示するためのコードを示す。

Alert alert = new Alert();
alert.setAlertText1("Softbutton Pressed!");
alert.setAlertText2("Wait for 5 seconds to dismiss.");
alert.setDuration(5000);
sdlManager.sendRPC(alert);

 SDLの車載機のアラートは、運転中に注視したり、ボタンを探して操作したりする必要がないよう、このように時間が経ったら自動的に閉じるような設定も有効だろう。

 このコードは、上で作った2番めのソフトボタンオブジェクトのイベントリスナーの中に書く。ソフトボタンオブジェクトを作成している部分を含めて、イベントリスナーのコードを以下に示す。

SoftButtonObject button2 = new SoftButtonObject("button2", button2States, button2S1.getName(), null);
button2.setOnEventListener(new SoftButtonObject.OnEventListener() {
    @Override
    public void onPress(SoftButtonObject softButtonObject, OnButtonPress onButtonPress) {
        Alert alert = new Alert();
        alert.setAlertText1("Softbutton Pressed!");
        alert.setAlertText2("Wait for 5 seconds to dismiss.");
        alert.setDuration(5000);
        sdlManager.sendRPC(alert);
    }
 
    @Override
    public void onEvent(SoftButtonObject softButtonObject, OnButtonEvent onButtonEvent) {}
});

 この例でも、動作としては不要なonEvent()メソッドを記述しているが、上で述べたように中身が空でも、このメソッドを記述しておく必要がある。

 以上のコードを加えたアプリを実行して、車載機エミュレーター画面の「Button 2」というラベルのボタンをクリックしてみよう。すると、「Softbutton Pressed!」というメッセージを表示するアラートが表示される(図10)。

図10:アラートを表示するためのコードをイベントリスナー内に加えたことで下の「Button 2」をクリックすると、このようなアラートを表示するようになった

 そしてこのアラートは、「Wait for 5 seconds to dismiss.」と表示されている通り、何もしなくても5秒後には自動的に閉じられる。


メニュー画面にメニューコマンドを追加する

 今回ベースとして利用しているサンプルプロジェクトには、車載機画面右上の「≡」マークのメニューボタン(いわゆるハンバーガーメニュー)を操作すると表示されるメニュー画面のコマンドも1つだけ含まれている。もちろんこのメニュー画面には複数のメニューコマンドを表示し、ユーザーに選択してもらうことができる。

 ここでは、最初からある「Test Command」に加えて、サブメニューを持たない単独のメニューコマンドと、サブメニューを持ったメニュー項目をそれぞれ1つずつ、さらにそのサブメニューとして表示する2つのメニューコマンドを追加する例を示す。

 まずは、サブメニューを持たない単純なメニューコマンド1つを追加してみよう。車載機上のメニューを作成するには、まずメニューコマンドの名前やIDを含むメニュー項目をMenuParamsクラスのオブジェクトとして作成する。必要なプロパティを設定したら、そのオブジェクトを、こんどはAddCommandクラスのオブジェクトにセットする。その後、SdlManagerを使って、そのAddCommandクラスのオブジェクトRPCで送信すればいい。

 このような手順によって、「Menu Item without Submenu」という名前のコマンドをメニュー画面に追加するコードは以下のようになる。

MenuParams menu1 = new MenuParams();
menu1.setParentID(0);
menu1.setPosition(1);
menu1.setMenuName("Menu Item without Submenu");
 
AddCommand addCmd = new AddCommand();
addCmd.setCmdID(11);
addCmd.setMenuParams(menu1);
 
sdlManager.sendRPC(addCmd);

 ここでは、setParentID()メソッドによって親のIDとして0を指定している。これは他のメニューのサブメニューとしてではなく、ルートのメニュー画面に直接表示するものであることを示している。このコードは、上で記述したソフトボタンを追加するためのコードの後ろに続けて書けばいい。念のために、その位置をスクリーンショットで確認しておこう(図11)。

図11:メニューを設定するためのコードは、上でソフトボタンを設定したコードに続けて、やはりperformWelcomeShow()メソッドの中に書く

 このプログラムを動かして結果を確認してみよう。アプリ画面が表示されたら、右上の「≡」のようなボタンをクリックすると、2つのメニューコマンドを持ったメニュー画面が表示される(図12)。

図12:アプリ画面右上のコーナーにある「≡」ボタンをクリックすると、アプリ画面全体がメニュー画面に切り替わる

 元からあった「Test Command」の下に、「Menu Item without Submenu」というメニューコマンドが追加された。このメニュー画面の表示は、右端に「>」のようなマークが表示されていて、サブメニューがありそうにも見える紛らわしい表示となっているが、これは単にメニューコマンドを表しているマークだと考えられる。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

最新記事

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン