Notes開発者のためのXPagesデザインレシピ

簡単でCoolなXPagesアプリケーションを作るための情報を発信していきます

Noamd Notesクライアント レイアウト

Notes、Nomadで作るレスポンシブアプリDay2:ウィンドウサイズによるレスポンシブ

前回からの続き

 前回はOS種別によって判定を行いました。これは一見便利ですが、面倒な点があります。
 デバッグが面倒という点です。最終的な動作確認はiPhoneなどの実機で行いますが、実装中の確認を、毎回データベースプロパティをいじって、スマホ用のフレームセットを変更するは面倒です。
 そこで今回はV12から追加された@ResolutionWidthと@ResolutionHeightを使って、ウィンドウ幅とウィンドウの高さを判定基準に開く画面を決定してみたいと思います。

@ResolutionWidthと@ResolutionHeightの使い方

 @ResolutionWidthと@ResolutionHeightは、ウィンドウ幅とウィンドウの高さを取得する新しい関数です。関数の動作については2022年に中野さんやHCL公式が下記のような記事を上げています。
HCL Nomad Mobile のご紹介 (2022年2月) | PPT (slideshare.net)
画面の幅と高さを知るには | ノーツってヤッぁ..二児の父の苦悩つ (harunakano.blogspot.com)
 表示用の計算結果フィールドなどでもウィンドウサイズが取得できそうです。手元にあった端末で、関数から取得できる値と液晶の解像度を調査すると下記のようになりました。@ResolutionWidthを基準に複数端末に対応するには、まずは関数で取得できる値を調査して、レイアウトの切替ポイントとなる幅を決める必要がありそうです。

端末@ResolutionWidth : @ResolutionHeight液晶解像度
WindowsPC - 全画面1877 × 9081920 × 1080
Xperia10 V710 × 2402520 × 1080
iPad mini 61133  × 6502266 × 1488
iPhone8667 × 2841920 × 1080
アイリスオーヤマAndroid13タブレット1666 × 9081920 × 1200
@ResolutionWidthと@ResolutionHeight関数で取得する値と

 今回は動作確認ですので、横画面(@ResolutionWidth>@ResolutionHeight)ならPC用フレームセット、縦画面(@ResolutionWidth<=@ResolutionHeight)ならスマホ用フレームセットを開く実装にしてみたいと思います。

PostOpenで@ResolutionWidthと@ResolutionHeightの実行確認

 表示用の計算結果フィールド、計算結果フィールドではウィンドウサイズが取得できることがわかったので、今度はフォームのPostOpenイベントに@式を記述し、動作するか?を確認します。

【@式-PostOpenイベント】

@Prompt([Ok]; "画面サイズ 横:縦" ; @Text(@ResolutionWidth) + "" + @Text(@ResolutionHeight))

【実行結果-PC】

 実行結果を見ると、フィールド内で取得できる値と、PostOpenで取得している値には違いがあるようです。ウィンドウサイズを変えてもPostOpenで取得できる値は常に同じ値だったので、PostOpenで取得できるのはウィンドウサイズではないのかもしれません。ウィンドウを最大化した場合のサイズとも違うようです。ちなみにNomad(Android、iOS)ではフィールドで取得できる値とほぼ同じ値が返ってきます。

 PostOpenに記述した@式では想定したウィンドウサイズは取得できなかったので、「表示用の計算結果フィールド」を作成し、PostOpenイベントで取得する形で実装したいと思います。

【フィールドイメージ】

スマホ用フォームのPostOpenイベントでウィンドウサイズを判定し、開くフレームセットを切り替える

 前回は、OS判定用のページを作って、スマホ用フレームセット、PC用フレームセットを開いていましたが、今回はデフォルトでスマホ用フレームセットを開き、ウィンドウサイズによってPC用フレームセットを開くか?判定します。
※判定用ページ方式が良いか?今回のような方式が良いか?は利用端末の割合(スマホ優先、PC優先)などにも変わりますので、自社にあった方法を使用して下さい。

【実行イメージ】

【LotusScript】

Sub Postopen(Source As Notesuidocument)
	'ウィンドウサイズを取得し、横幅>高さの場合は、PC用フレームセットを開く
	
	'変数、クラス宣言
	Dim ws						As New NotesUIWorkspace	
	Dim iResolutionWidth		As Integer
	Dim iResolutionHeight		As Integer
	
	'クラス、変数セット
	iResolutionWidth			= Cint(Source.FieldGetText("ResolutionWidth"))
	iResolutionHeight			= Cint(Source.FieldGetText("ResolutionHeight"))
	
	'ウィンドウサイズを判定して、フレームセットを開く
	If iResolutionWidth > iResolutionHeight Then
		Call ws.OpenFrameSet("fsMain")
		Call Source.Close
	End If
End Sub

【実行結果-PC】

【実行結果-Nomad(Android)】

 @ResolutionWidthと@ResolutionHeightを使うことで、PCでも縦長画面はスマホ用フレーム、横長画面はPC用フレームを開くことができるようになりました。

次回予告

 今回は@ResolutionWidthと@ResolutionHeightを使ってウィンドウサイズを判定し、表示するフレームセットを切り替えるという動作を実装しました。次回は同じタイミングで実装されたonSizeイベントを使ってさらに高度な画面切替を実装できるかを確認します。