先日、Google+「AppInventorコミュニティ」で見つけたTipsを参考に、操作画面の一部を自動リサイズさせてみた。
前回試しに作ったのは横幅3等分と4等分に出来るボタンの自動リサイズ。

[【AppInventor開発】画面サイズを元に自動リサイズするボタン]

今度は棚卸画面全体のリサイズに挑戦:-x
と言うか必要にせまられたので・・・・・・

理由は違うけど同時期に2台のAndroid端末のディスプレーパネルを割ってしまい修理に出すことに・・・(泣)

1台は実践投入中の「Huawei Ascend G620S」
修理の間は、同僚にもらったばかりの4.1インチスマホを代替機として使用。

その上で、僕の愛機NEXUS7が机から落下!
がーん、不覚にも液晶を割ってしまった:-o

僕のNEXUS、大量の棚卸をする時に必要に応じて仕事にも投入する予備機でもあり、一時的に端末1台分が不足中。

そこで、急遽使っていない4インチディスプレイの古いスマホ(=Android2.3)が使えないか試してみました。

しかし4インチディスプレーは小さく、操作ボタンの一部がはみ出て操作出来ない!

ちなみに、僕のハンディーターミナルアプリにはリサイズ機能が有りS、M、Lサイズで画面上の部品サイズを数値固定で最適化しています。
Lサイズ:7インチ(解像度:1920×1200)
Mサイズ:5インチ(解像度:1280×720)
Mサイズ:4.7 インチ(解像度:1280×720)
Sサイズ:4.1 インチ(解像度:960×540)

Sサイズより小さい4インチ(解像度:800×480)では、右端の一部と数字キーの1列分が画面の外に!

そこで決断、棚卸の全画面自動リサイズ機能を作ってみよう!

まずはパワーポイントに横12×縦20の方眼紙模様を貼り付け画面の部品をグリッドに合わせて配置する。横を12にしたのは3と4の両方で割り切れるから。

AppInventor開発:ディスプレーサイズで操作画面を全面リサイズ

この設計図を元に、僕のAppInventorアプリに全面リサイズ機能を組み込んでいく・・・・
さて、うまく出来るかな?

AppInventor開発:ディスプレーサイズで操作画面を全面リサイズ

がーん、画面が壊れた:-o
画面が上半分によっている!

原因を調べると棚卸画面表示と同時にシステムがソフトキーボードを自動表示させてるみたい。
リサイズプログラムはキーボード表示後に動き出すので、キーボードの高さを引いた分がリサイズプログラムの基本値になる画面の高さとして代入されている!

困った・・・・・
Screen.Initialize先頭にHileKeyboardしてもこの不具合は直らない。

AppInventor開発:ディスプレーサイズで操作画面を全面リサイズ

困った、困った、困った:-o
全面リサイズ用の改造したことで、せっかく完成していた従来のリサイズ機能を潰してしまった。
後には戻れない:-(
何とか、この方向で完成させなければ・・・・・
愚かな冒険を始めてしまった 🙁

追記:

画面切替時に表示されるキーボードがどうしても止められず正しいディスプレイの表示縦サイズが取得できない。
今回作ったプログラムは、この縦サイズを基準に各パーツの高さを計算する仕組みなので、この不具合は致命的。

そこで作戦変更!

トップ画面から棚卸画面を呼び出す時に、トップ画面の高さを取得し棚卸画面へ持ち込む。棚卸画面のリサイズ機能の基準縦サイズは、そのトップ画面の値を使うようにプログラムを変更しました。

トップ画面の画面切換えボタンに「Scree.Hight」をjoinで追加
AppInventor開発:ディスプレーサイズで操作画面を全面リサイズ

棚卸画面では「get start value」でその値を取得し画面の縦サイズに代入。
AppInventor開発:ディスプレサイズで操作画面を全面リサイズ

これでようやく壊れてしまった棚卸画面が元に戻りました(ホッと)

ただ、Android2.xは4.xより各パーツ周りに出来るマージンが多いのか画面の一部が欠けてしまう。
そこで、IF文を追加してAndroid2.x(=4インチディスプレイ)の時は全体的に5%ほど小さい目にリサイズさせ棚卸リサイズ機能は無事完成しました 🙂

ついでに、パーツが少ないトップ画面とシステム管理画面のリサイズ機能も完成。

あと数画面でリサイズ全面導入が完了なんだけどな・・・・

でも、もっともプログラムが複雑で部品数も多い受注画面を触るのは怖いな・・・・
苦労してやっと安定してきたハンディーターミナルアプリの胆画面!

4インチスマホでは受注はしない前提で、いじるのを止めておこう・・・ 🙁

(102 views)

コメントを残す

メールアドレスが公開されることはありません。