KotlinでAndroidアプリ#29

方針変更

指定されたマス目の個数に応じてマス目を生成したい。しかし部品が縦均等に伸長しなかった。実現するため別の方法で行う。

部品を生成するのではなく、最大個数用意しユーザ指定により不要マス目を見えなくする。

最大マス目を用意

想定しいている7✕7マス目を定義する。

プログラムでハンドリングできるように、行、全てのマス目を配列化する。

かなり力技だ。自慢できないコードだが、仕様を実現するためには仕方がない。

Visibility

部品属性に「Visibility」がある。これは部品を表示/非表示にできるのだ。設定値は次の通りである。

属性値 内容
VISIBLE 表示する
INVISIBLE 非表示にする。レイアウトは維持される
GONE 非表示にする。レイアウトは再配置される
マス目個数に応じて最適なレイアウトにしたいので、不要行、マス目に「GONE」を設定する。

試しに3×3のマス目に変更する。次のプログラムを記述した。

二重ループしながら4行目以降の行、4列目以降の列に、「GONE」を設定している。実行する。

無事に表示できた。この方法を採用する。

定義ファイルを分割

7✕7のマス目定義だけで500行以上になってしまった。他部品を変更するにも邪魔になる。そこでテーブル定義を別ファイルにし、メインの定義ファイルで取り込むことにした。

テーブル定義を別ファイル(table.xml)にする。

メインの定義ファイルでtable.xmlを取り込む。その命令が「include」だ。

2行目でテーブル定義ファイル「table.xml」を指定している。この後、デザインモードでtableを再配置する。

実装

STARTボタンが押下された時点でユーザ指定のマス目のみ表示する。関数setBanを実装した。

STARTボタンが押下されると実行される。二重ループしながらユーザ指定のマス目(numberpicker2.value)なら行、列にVISIBLE、以外ならGONEを設定している。

動作を確認する。


指定されたマス目の個数に応じてゲーム画面が変更できた。次はユーザ指定の三目、四目・・・並べに応じてゲームができるようにする。

前へ<ーーー>つづく

タイトルとURLをコピーしました