Automate で選択肢の提示をする方法についてまとめました。
環境 : Android 9.0, Automate Version 1.23.1
選択ボタンを表示させる
今回扱うのは Interface - Dialog choice ブロックです。
選択肢を提示し、いずれかが選択されたらYES
へ、CANSEL
が押されたらNO
に分岐します。
まずは変数について見ていきます
Input arguments 入力引数
Title
ボタンウィンドウのタイトル。何も書かなければタイトルは出ない
Choices
選択肢。array型かdictionary型で与える
["first", "second", "third", "else"] //array -> 選択肢は first second third else {"first" : 1, "second" : "two", "third" : 3, "else" : "その他"} //dictionary -> 選択肢は 1 two 3 その他
Multi-select
複数選択。デフォルト(チェックボックスが灰色の[-])では false
- true - 複数選択できるようになり、ボタンウィンドウがチェックボックス式になる。
ALL
(全選択)が表示される。 - false - 複数選択は不可能。ボタンウィンドウは選択肢が並ぶだけになる。
No selection
何も選択せず次に進むことができるかどうか。デフォルトではfalse
- Multi-select = false(単一選択)のときは無効。チェックの有無にかかわらずfalse。何も選択しないならば
CANSEL
を押すしかない - true - チェックボックスに何もいれなくても
OK
を押せる。 - false - チェックボックスがどれも選択されていないと
OK
が押せない。
Sort
選択肢のソート。デフォルトではtrue
- true - 選択肢が、array型なら各要素で、dictionary型なら各valueによって辞書順にソートされる。ソート順は 数字→アルファベット→日本語。
- false - 選択肢が、入力したChoicesの順序のまま表示される。
Choices = ["first", "second", "third", "else"] //array Sort : true -> 選択肢は else first second third の順で表示 Coices = {"first" : 1, "second" : "two", "third" : 3, "else" : "その他"} //dictionary Sort : true -> 選択肢は 1 3 two その他 の順で表示
Pre-selected
ユーザーが選択する前にあらかじめ選択しておく際入力。デフォルトは空白(none)。Multi-selectの真偽によって挙動が異なる
- Malti-select : true - チェックボックスで、指定された選択肢にあらかじめチェックがつく
- Malti-select : false - ボタンウィンドウがラジオボタン式になり、Pre-selectedの要素が選択された形で表示される。
Choicesの型によって入力方法が異なる
- Choicesがarray型 - Choicesに対するインデックスを1つ入力(ソートについては考えなくて良い)。もしarray型で列挙した場合はarr[0]が採用される。
Choices = ["first", "second", "third", "else"] //array Pre-selected = 2 -> 選択肢 third があらかじめ選択される
Pre-selected = [2, 1] -> Pre-selected = 2と同値
- Choicesがdictionary型 - Choicesに対するkeyをarray型で列挙(一つなら変数のみでも良い)。
Choices = {"first" : 1, "second" : "two", "third" : 3, "else" : "その他"} //dictionary Pre-selected = ["else", "fiest"] -> 選択肢 1, その他 があらかじめ選択される
Timeout
入力の制限時間。デフォルトでは空白(ずっと待機する)。
入力は 0h 5m 0s のような直感的入力のほか$fx$を有効にしてにて秒数で指定も可能。
指定時間以内に入力がなされなければNO
へ分岐する
Notification channel
よくわからないけどデフォルトの空白のままで困らない
Show window
ボタンウィンドウを即時表示する。デフォルトはfalse。普通はtrueにすると良い
- true - Dialog choiceブロックに至ったら即座にボタンウィンドウが表示される
- false - Dialog choiceブロックに至ったら、通知がでて、その通知を押すとボタンウィンドウが表示される。
Requires the “appear atop of other apps or parts of the screen” privilege on Android 10+.
(documentationより)
Output variables 出力変数
Array of selected indices/keys
indicesはindexの複数形
選択したものはarray型で出力される。選択肢が単一だとしても出力はarray型なので、取り出すにはarr[0]
のようにしなければならない
Choices = ["first", "second", "third", "else"] //array Array of... : x -> second を選択 -> x = [1] //インデックスは0始まりであることに注意 Choices = {"first" : 1, "second" : "two", "third" : 3, "else" : "その他"} //dictionary Array of... : x -> two その他 を選択 -> x = ["second", "else"]
使用例
以下の擬似プログラミングに沿って作ってみる。General::Variable set
とは、Variable set
ブロックがGeneral
カテゴリにあることを明示しています。
Flow beginning{} General::Variable set{ Variable : tenki Value = ["晴れ", "曇り", "雨", "雪"] } Interface::Dialog choice{ Title : 今日の天気は? Choices = tenki //先に設定したarray型変数を使う Show_window : true Array_of... : selected } Interface::Dialog message{ Title : 今日の天気は Message : {tenki[selected[0]]}です Show_window : true }
順につなげてこのようになります
実行
曇り を選択
おしまい
Automateについてはこちらもご覧ください