無料ブログはココログ

« AndroidでMindをどうやって動かすか(2) | トップページ | イベントリスナー »

2013年5月16日 (木)

レイアウト系

レイアウトやビューなど表示のごく基本のところをまとめておく。

Javaのオブジェクト指向コーディングをMindのコーディングにどうやって対応させるかの問題にいきなり直面した(^^;。
まずレイアウト系のオブジェクトの扱いだが、たとえばJavaでは、

    layout1 = new LinearLayout( this );

などと書いて「layout1」という名前のリニアレイアウトのインスタンスを作るが、このオブジェクト(Java内部ではたぶんポインタ)をMindへ渡されても何も使い道が無い。さらには、Javaレベルの「layout1」なる名前もまたMind側からは見えない/見たくないものである。そもそもMindでプログラムを書くのだから名前はすべてMind側で(たとえば適当な日本語名で)決めるべきものである。
結果として以下のようにした。

  ------------------------------------------------------------------------
  (Mind)
          _レイアウトは   レイアウト
    ~略~
    リニアレイアウトを生成し _レイアウトに 入れ

                                          (注:変数名の頭にアンダースコアを付ける
                                               のはMindのルールではなく単に筆者の
                                               好みである。局所変数と大域変数とで
                                               区別がつきやすいようにしている)
                          ↓
  (Java)
          private  LinearLayout[] linearLayouts = new LinearLayout[20];
    ~略~
    linearLayouts[seqno] = new LinearLayout( this );
  ------------------------------------------------------------------------

 Mindの「リニアレイアウトを生成」でリニアレイアウトのインスタンスを作ることにする。実際には単純に1から始まる整数(通し番号)を生成するだけであり、これで個々のリニアレイアウトを識別する。
 JavaではMindから渡された通し番号(上記で"seqno")を添え字としてリニアレイアウトのインスタンスを配列として管理する。先に書いたようにJava側で個別インスタンスに名前を付けても使い道が無いが配列要素は無名なのでちょうど良い。

 ビューについても同様で以下のようにした。
  ------------------------------------------------------------------------
  (Mind)
         _案内文は       ビュー
    ~略~
    テキストビューを生成し _案内文に 入れ

                          ↓
  (Java)
          private TextView[] textViews = new TextView[20];
    ~略~
    textViews[seqno] = new TextView( this );
  ------------------------------------------------------------------------

 Mind側ではレイアウトの時と同様、「テキストビューを生成」によって通し番号を生成しその番号で管理する。またテキストビューのほかにボタンやチェックボックスなど他のビュータイプも一括して操作できるよう、それらを表すタイプ情報も含めて管理している。(実は先のレイアウトもMindでは複数のレイアウトタイプを番号で識別している)

 レイアウトとテキストビューをそれぞれ1つ扱うMindのプログラムは次のようになる。
    ----------------------------------------------------------------------------
    メインとは
                    _レイアウトは  レイアウト
                    _案内文は      ビュー
      (レイアウト)
            リニアレイアウトを生成し  _レイアウトに  入れ
            垂直を                    _レイアウトに  子の追加方向を設定し
            _レイアウトを  レイアウトをアクティビティに追加し
      (ビュー)
            テキストビューを生成し  _案内文に  入れ
            18を                  _案内文に  文字のサイズを設定し
            「こんにちは」を        _案内文に  文字を設定し
            _案内文を  _レイアウトに  ビューを追加し
            。
    ----------------------------------------------------------------------------

  上のソースコード末尾の「ビューを追加」について補足する。
 引数は <元ビュー> と <先レイアウト> だが、Mind側での型管理が無いとすると、たとえば
    ----------------------------------------------------------------------------------
    _テキスト1を  _リニアレイアウト1に    テキストビューをリニアレイアウトに追加し
    _テキスト1を  _フレームレイアウト1に  テキストビューをフレームレイアウトに追加し
    ・・・
    _ボタン1を    _リニアレイアウト1に    ボタンビューをリニアレイアウトに追加し
  _ボタン1を  _フレームレイアウト1に  ボタンビューをフレームレイアウトに追加し
    ・・・
    ----------------------------------------------------------------------------------

のように、全組み合わせの処理単語(関数)を設置する必要が出て、これはいかにも苦しい。
Mind側に最低限の型管理を導入することできれいなコードになるようにした(1つの「ビューを追加」で済む)



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

« AndroidでMindをどうやって動かすか(2) | トップページ | イベントリスナー »

Android」カテゴリの記事

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: レイアウト系:

« AndroidでMindをどうやって動かすか(2) | トップページ | イベントリスナー »