Exercise1_答えと解説

# 答え

今回の答えになるサンプルプロジェクトを以下に添付しておきます。
そっくりそのままにする必要はありませんが、
スキンの設定や各要素の配置方法など参考にしましょう！

▶︎[お題1の答えサンプル](https://github.com/konyqiitadev/Answer1)

【プロジェクトを開く時の注意点】
上記のサンプルプロジェクトを開く時は、
リポジトリをクローンして、Visualizerを開くようにしてください。
（zipファイルをダウンロードしてもVisualizerでプロジェクトを開くことができないため。）
![スクリーンショット 0004-07-25 13.36.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/9cdc9530-7da5-cf37-cb0b-ea2f4c8f4207.png)

画面の作成方法について、
今回のポイントを交えながら説明していきます！

上手くいかなかった人も、上手にできた人も目を通すようにしてくださいね:ok_hand_tone1:

# ★お題1の解説　

## 1. FlexContainerを設置
まず、今回のデザインでは
・ヘッダー
・画像
・商品説明 等
が上から下に縦並びで配置されているため、
各要素を入れるためにまず大きい箱を用意しましょう。

Form内にFlexContainerを設置します。
（今回は、ID名は`flxMain`とします。）
![スクリーンショット 0004-07-19 16.23.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/cb15e566-0734-d516-b710-ccfd1050aa2f.png)


次に右メニューのFlexContainerタブを選択し、
Layout Type : Flow to Vertical（垂直）を選択します。
![スクリーンショット 0004-07-15 15.04.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/f84767fe-2702-10d4-f679-c64937208076.png)

画面いっぱいになるよう、幅と高さを100%に設定しましょう。
![スクリーンショット 0004-07-19 16.17.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/076c7fc9-e27f-5f56-e8bf-459c34438acd.png)

こうすることで、以降この中にWidgetを入れていくと、
上から下の順に要素が並ぶようになります！

:::note
①開発のポイント
要素を水平または垂直に並べ替えたい時は、FlexContainerを使おう！
1. 要素をFlexContainerに入れる
2. Layout Typeを、Horizontal（水平）またはVertical（垂直）に設定
参考：[FlexContainer Widget（公式ドキュメント）](https://docs.kony.com/konylibrary/visualizer/viz_widget_prog_guide/Content/FlexContainer_Properties.htm#layoutTy)
:::


## 2.ヘッダー部分の作成
土台となる画面のベースができたので、この中にヘッダー部分を作成していきます！
![スクリーンショット 0004-07-14 15.31.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/727ba2cb-981e-9248-0c23-cae3e4b31f86.png)

先ほど1で作成したFlexContainer（以降、`flxMain`）の中に、
ヘッダーの要素を入れるためのFlexContainer（ID名：`flxHeader`）を追加します。
デザインでは、戻るアイコンが左端、ヘッダータイトルが画面中央に配置されているため、
今回はLayout Typeは、Free FormのままでOKです。

ヘッダーの箱ができました。
![スクリーンショット 0004-07-14 16.52.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/e52e08f6-60d5-bace-1366-4da053a1098d.png)


### Widgetの追加
上記で作成したflxHeaderの箱の中に、
ImageとLabelのWidgetを追加します。


Widgetを追加したら、WidgetID名をわかりやすい名前に変更してください。
今回は、`lblHeaderName`,`imgReturn`と命名しました。

:::note
②開発のポイント
Widgetを追加したら、**WidgetID名をわかりやすい名前に変更**しておくようにしましょう。
例）メールアドレス入力のテキストボックスなら、`txtMail`など
※Widget名の略を頭につけるのが一般的です。

**Widgetのテキストをロジックで変更する場合などに、
対象Widgetが探しやすくなり開発の効率がアップします。**
:::


### 画像の設定
画像の設定を行います。
Image　Widgetの右メニューからImage->SourceのEditをクリックします。
![スクリーンショット 0004-07-14 15.33.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/a0cb0627-3f50-8ddd-c2bc-9d63f67723c8.png)
画像を選択するポップアップが表示されるため、
Importボタンをクリックし、まず今回使う画像を追加しておきましょう。
![スクリーンショット 0004-07-14 15.36.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/e01112e3-0f61-caf1-2ff3-3f2976b194bd.png)

追加できたら、今回使う画像を選択しOKボタンをクリックしたら画像の変更は完了です。


### ラベル設定

#### テキスト変更
Label Widgetを選択し、右メニューのLook->Textを変更します。
デフォルトの文字が設定されているため、
今回表示する「クーポン詳細」を入力すれば、テキストの変更ができます。
![スクリーンショット 0004-07-15 15.06.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/0ff0ba41-43eb-36d5-a3b7-f74bf84eb7e8.png)

#### フォント変更
また今回は、フォントがデフォルトで入っているものではないため、
フォントのインポートをする必要があります。

まずは、こちらからフォントをダウンロード。
https://fonts.google.com/noto/specimen/Noto+Sans

Visualizerでは、`.ttf`拡張子のみをサポートしておりますので、
ttfに変換をしておきましょう。
![スクリーンショット 0004-07-14 15.01.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/c9b90142-3af1-8fcf-cc83-d6f8ab1fc48d.png)

VisualizerでAssets->Fontsを右クリックし、「Import Fonts」をクリック。
![スクリーンショット 0004-07-14 15.01.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/2613afa5-8907-355a-274a-4c950aa6ce83.png)
ダウンロードしてきた「NotoSans」フォントを選択したら、フォントのインポートが完了となります。


インポートが完了したら、フォントを選択できるようになります。
`lblHeaderName`を選択した状態で、
今回のデザインに沿って、SkinタブのFontsを以下のように変更しましょう。

![ezgif-3-c15d8d99f0.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/dcaef1dd-9b8f-8667-dc34-0835fa727bdb.gif)

:::note
③開発のポイント
デフォルトにないフォントを使う場合は、
外部からダウンロード後Visualizerでインポートすることで利用可能となります。
詳しい設定方法は、以下もご参照ください。
▶︎[Kony Visualizerに外部フォントを取り込む](https://qiita.com/Kony_Team/items/0b62fee0a257e0209e88)
:::

#### スキン設定
ここで画面全体を見ると、同様の文字色・サイズのものがいくつかあると思います👀

![スクリーンショット 0004-07-15 14.26.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/54ce0354-2369-076e-8fd6-6429df92c355.png)![スクリーンショット 0004-07-27 12.06.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/6e72667c-2d02-f0e2-0bff-cccfc0ff7808.png)






今回の仕様をみると、1,2,5の文字が同じフォント・サイズ・色ですね！
色やフォントが同じもので共通して使用できるものは、
Skin名を設定するようにしましょう！

:::note
④開発のポイント
アプリ内で同様の色を使う場合は、
**対象のものに対してSkin名をつけておきましょう。**

Skin名をつけておくことで、
途中で仕様変更があった場合に、対象skinの設定を変えるだけで
**他の画面で利用されている対象Widgetの色を一気に変更することができる**
というメリットがあります:relaxed:🌈

例）
全画面で、文字の色を赤から青に仕様変更してほしいとお客様から依頼あった場合、、
（実装）Skin名：sknLblTitleのColorを赤から青にする
（結果）sknLblTitleのskinをあてているWidget全ての青に変更される

![ezgif-3-813bb10947.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/89975cab-d50b-a047-7213-665db285d2c7.gif)

最初にskinを設定しておくと、
後々仕様変更があった際など、変更がとっても楽です。

共通で使用する文字やボタンがある複数ある場合は、
skin名を必ず設定し同じものをあてるようにしましょう！


スキンの基本説明については、こちらの記事で紹介しています。
併せてチェックしてみてくださいね！

▶︎[Skinの概要と使い方のご紹介](https://qiita.com/Kony_Team/items/5f0c194cc03a7900fd60)
:::

今回は、`sknBlackBoldS`としました。
文字の色や大きさなどをSkin名に含めておくと、
管理がしやすく探すのが便利になります！



画像とタイトル文字が完成したので、
次に、各Widgetが同じ高さで配置されるよう修正します。



### 各Widgetを整列させる
ヘッダー部分の高さは、画面全体の5%くらいなので、
flxHeaderの右メニューのLookタブでHeightを5%に設定しておきましょう。
![スクリーンショット 0004-07-14 16.10.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/3f65ffbe-ea0f-b303-fc1f-46d5a8926539.png)

中に入っている要素を、同じ高さにするため、
各要素のLookタブで値を変更しましょう。

このような設定値になっていればOKです。
| 戻るアイコン |ヘッダータイトル | 
|:-----------|:------------|
|![スクリーンショット 0004-07-14 16.17.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/a46a3a3b-1202-8292-0cc5-18739105f327.png)|![スクリーンショット 0004-07-14 16.17.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/4099c174-7c11-f059-3f32-b49ae9d042ba.png)|

:::note
要素を中央寄り、右寄り等に配置したい場合は、
以下の部分をクリックするとワンクリックで配置の変更ができます。
![スクリーンショット 0004-07-14 16.26.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/49ad851e-735c-6182-faf3-0dc5e9b59c3e.png)
便利な機能なので覚えておきましょう！
:::



これで、ヘッダー部分が完成です。
![スクリーンショット 0004-07-14 16.28.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/6871ce14-9000-d6c5-ce54-278271a63bcc.png)

以降は、画像の挿入や、FLexContainerの手順については省略し
ポイントのみを説明します。
サンプルプロジェクトや、これまでの説明を確認して進めてみてくださいね！

## 3. メインエリアの作成
ヘッダー下のメインエリアのレイアウトを作成します。

frmMainの中に、
商品紹介エリアを入れるためにFlexContainerを作成し、ID名：`frmContents`とします。
またボタンを入れるためにFlexContainerを作成し、ID名：`flxButtom`とします。

このような構造になっていればOKです。
これまでの手順を参考に要素を追加していきましょう！
![スクリーンショット 0004-07-15 14.52.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/5627ea04-ff16-8662-ff4d-7a0d565fc88a.png)


## スキンの適用
「おいしいラーメン店 東京駅前店」と
「【期間限定】開店祝い記念クーポン」の文字が、
タイトルの「クーポン詳細」と同じフォント・サイズ・色になっていると思います。

LabelWidgetを配置したら、
Skinを先ほど作成した、`sknBlackBoldS`に変更しましょう。
![ezgif-3-d039699fb1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/20049b13-ffc8-882b-3bcd-e35211e4da2e.gif)

すると、文字のフォントや色がタイトルと同じになったかと思います！

[2のスキン設定](#スキン設定)で説明した通り、一度skinを設定すると
また同じ設定をする必要がないためとっても便利です。

今後よく使う機能ですので、是非活用してくださいね🎉

その他のスキンについては以下のように設定しています。
命名規則など参考にしてみてください！

![スクリーンショット 0004-07-15 13.35.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/4a4e1d2f-3009-d707-815a-1bede21b71b9.png)

|No |フォント・サイズ |文字色  |背景色|Skin名|
|---|---|---|--|-|
|1,2,5|NotoSansJP Bold 14px|050C1E|-|sknBlackBoldS|
|7|NotoSansJP Bold 14px|050C1E|2B90FF|sknBtnBlueNormal|
|3|NotoSansJP Bold 24px|050C1E|-|sknBlackBoldM|
|4|NotoSansJP Medium 12px|858A9B|-|sknGrayMediumSS|
|6|NotoSansJP Regular 14px|050C1E|-|sknBlackRegularS|

以上、お題1の解答と説明でした！

# ★お題2の解説
お題2のボタンをタップした時に色を変更する方法について説明します。

:::note
開発のポイント⑤
まず前提としてButton Widgetをセットした際、
タップ時のSkinはデフォルトのものが自動でセットされます。

タップ時のSkinであるFocus Skinを編集しないままだと、見栄えが悪いため
Button Skinを使う場合は、タップ時のFocus Skinも忘れないよう設定しましょう。
![ezgif-5-29c5faa3ed.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/5ff51c12-7cd7-1a7b-89ef-d5bcded3cc95.gif)
:::

早速Focus Skinの設定方法を説明します。

1. VisualizerでボタンWidgetを選択した状態で、右メニューのSkinタブを開きます。
Normal、Focus、Blocked UI、Pressedと4つ並んでいる中の
Normalがデフォルトで選択されていると思います。<br>![スクリーンショット 0004-07-20 10.40.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/217f6c80-2ce1-d6d3-983d-61ea039e99b6.png)
今回、タップ時の色は
Normal Skinと同じ色で透明度80%に設定するため、
Normal Skinをコピーしたものを透明度だけ変更して作成していきます。

2. まずNormalを開いた状態で、CopyボタンをクリックしSkinをコピーします。

3. 次にFocusを選択し、Pasteボタンをクリックしてください。
すると、General->Nameの箇所にコピーされたSkinが作成されると思います。
これでNormal Skinを複製することができました！
![ezgif-5-f2efe14557.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/f2211849-8cfd-990f-964f-a04400b33c4c.gif)

4. あとは、Opacity（透明度）を80%に設定し、
Skin名をフォーカス時のスキンとわかるように名前を設定したら完了です！
![スクリーンショット 0004-07-20 10.32.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/8e1ccffa-754f-0f83-a124-bd199b96fa58.png)



以上、解答と説明でした！
最後に開発のポイントをまとめていますので、必ず覚えていきましょう⭐️

# 開発のポイント

今回の開発のポイントをまとめます！
どれも今後の開発において大切なことです。

できた人もできなかった人も、以下を念頭に置いて
今後開発を進めてくださいね！

:::note
まとめ
- **①画面内の各要素を整列させたい場合は、FlexContainerを使用する**
- **②Widget名は、わかりやすいように必ず名前を変更する**
- **③デフォルトにないフォントを使う場合は、インポートすることで利用可能となる**
- **④アプリ内で共通で使用するデザイン（文字の色、サイズなど）は、Skinを設定する**
- **⑤ボタンWigetを使う場合は、Focus Skinも設定する**
:::