無料ブログはココログ

« プリファレンス | トップページ | スタックコンピュータとFORTH(1) »

2013年9月26日 (木)

プリファレンスアクティビティ

Preferenceact3gattai_2
 先の「プリファレンス」に関連するものとして「プリファレンスアクティビティ」も実装した。
 Androidにはユーザと対話してプリファレンスのデータを編集し結果を記入してくれる高機能なアクティビティがあり、それを使うためのAPIが用意されている。プログラマとしては設定ファイルを用意せずに済み、ユーザインターフェースのコードも大幅に削減されるのでおおいに助かる。ただ高機能な分、Mindに実装するには手間がかかった。

 まず呼び出し元から。
 呼び出し先である本機能はダイアログ的に見えるがダイアログではなく独立したアクティビティなので本機能を呼び出すには一般的なアクティビティ起動と同じ手順を踏む。

   (Mindソース例)
    私のパッケージ名と "PreferenceActSub"で インテントを実行し _結果に 入れ

 次に本機能を実行するアクティビティについて。
 通常のアクティビティとは異なり、プリファレンスのGUIパーツの描画のみを記述する。
 Androidの標準的な開発手法では、設定画面のフォーマットをXMLファイルで記入するらしい。このあたりはレイアウト系の実装と同じ事情になるが、Mindでそのようなファイルを扱うことは避けたかったのであくまでJavaのコードで設定画面を作る方式をベースとし、そのJavaのコードをMindから駆動するようにした。
 書籍やWeb上の情報にはJavaコードでデザインをおこなう例が少なく困ったが、コードでの駆動方法を把握するのに以下のWebページは大変参考になった。

    「Preference(3)-Preference画面に関するTips - 愚鈍人」
    http://ichitcltk.hustle.ne.jp/gudon/modules/pico_rd/index.php?content_id=96#use_code

 上記Webページにおいて、スクリーンの設定は以下のようになっている。

    public class MyPreferenceActivity extends PreferenceActivity {

      @Override
      protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
                        ~略~

        PreferenceScreen pScreen =
             getPreferenceManager().createPreferenceScreen(this);
        pScreen.setTitle("PreferenceScreenのタイトル");
        setPreferenceScreen(pScreen);

 これをMindで書く場合は以下のようになる。

    メインとは
                _スクリーンは 変数

        プリファレンススクリーンを生成し   _スクリーンに 入れ
        "PreferenceScreenのタイトル"を  _スクリーンに プリファレンスにタイトルを設定し
        _スクリーンで プリファレンススクリーンを有効化し

 同様に上記Webページにおいて、チェックボックス・プリファレンスを表示するJavaのコードは以下のようになっている。(依存関係の指定は省略)

        CheckBoxPreference pCheckBox = new CheckBoxPreference(this);
        pCheckBox.setKey("checkKey");
        pCheckBox.setTitle("CheckBoxPreference");
        pCheckBox.setSummary("チェックボックスの例");
        pCheckBox.setDefaultValue(true);
        pCategory1.addPreference(pCheckBox);

 Mindで書く場合は以下のようになる。(以下ではカテゴリではなくスクリーンに追加)

                _チェックボックスは 変数

        チェックボックスプリファレンスを生成し _チェックボックスに 入れ
        "checkKey"を              _チェックボックスに プリファレンスにキーを設定し
        "CheckBoxPreference"を _チェックボックスに プリファレンスにタイトルを設定し
        "チェックボックスの例"を   _チェックボックスに プリファレンスにサマリを設定し
        真を                        _チェックボックスに プリファレンスにデフォルト値を設定し
        _チェックボックスを _スクリーンに プリファレンスを追加し

 上記のようにプリファレンスアクティビティ系のMindの処理単語はおおむねJavaのメソッドと一対一になった。例外はリストプリファレンスで、項目名と項目値はJavaでは別々に与えているがMindでは一度に与える仕様とした。

 前記事に書いた通り、(単なる)「プリファレンス」の実装ではJava側インスタンスの管理はあえて行わなかったが、こちらでは行なっている。スクリーン、カテゴリをはじめ、チェックボックスなどGUIパーツすべてについてJavaで生成したオブジェクトは大域配列に格納し、その要素番号でJavaとMindを結びつけるようにした。

 現段階で実装したMindの処理単語は以下の通りである。(数が多いので入出力パラメータは記載せず単語名だけとした)

        プリファレンスファイルを指定

        プリファレンススクリーンを生成
        プリファレンスカテゴリを生成
        チェックボックスプリファレンスを生成
        エディットテキストプリファレンスを生成
        リストプリファレンスを生成
        リングトーンプリファレンスを生成

        プリファレンススクリーンを有効化

        プリファレンスにキーを設定
        プリファレンスにタイトルを設定
        プリファレンスにサマリを設定
        プリファレンスにデフォルト値を設定
        プリファレンスにダイアログタイトルを設定
        プリファレンスにダイアログメッセージを設定
        プリファレンスにリスト項目を設定

        プリファレンスを追加


 プリファレンスが変更された時のイベント処理は現時点では未実装である。




参考URL: 「日本語プログラミング言語Mind」 (スクリプツ・ラボ)

« プリファレンス | トップページ | スタックコンピュータとFORTH(1) »

Android」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/100109/58269964

この記事へのトラックバック一覧です: プリファレンスアクティビティ:

« プリファレンス | トップページ | スタックコンピュータとFORTH(1) »