SlideShare a Scribd company logo
1 of 28
使いやすいソフトウェアの開発
早稲田大学基幹理工学部情報理工学科
近藤 智美 (1W182141-0 )
使う人によってレイアウトを最適化するAndroidアプリ
令和3年2月10日
プロジェクト研究B最終発表
目次
1
1. 概要
2. 始めに
3. タップ回数保存
4. レイアウト変更
5. 動作の様子
6. まとめ
1
5
9
13
18
21
概要|今回やったこと
使いやすいソフトウェアを作りたい
• 操作が苦手な人にも使って欲しい
• より人の身近にあるスマートフォンを題材に
押しやすい位置よく使うボタンが来るアプリケーションを開発する
2
人によって”使いやすい”の定義は異なるが…
スマートフォンには押しやすい位置と押しにくい位置がある
押しにくい位置にボタンがあるアプリは使いづらい!!と仮定
概要|使用するツール・アプリの内容
Android Studioを利用して
アプリを開発
• OS|Android
• 使用言語|Kotlin
• Androidアプリ開発用の公式IDE
3
ドラマ・映画を管理するアプリ
• 感想や評価、出演俳優をメモ
• リストから年や俳優で絞り込みできる
4
ボタンをタップ
回数を保存
並び替え
概要|プログラムの流れ
よく使うボタン
タップ回数が多いボタン
 ボタンをタップするたび
タップ回数を保存
 タップ回数の多い順に
ボタンを押しやすい位置に
 画面が再表示される際に
ボタンを並べ替える
目次
5
1. 概要
2. 始めに
3. タップ回数保存
4. レイアウト変更
5. 動作の様子
6. まとめ
1
5
9
13
18
21
始めに|タップしやすい場所とそうでない場所
6
押しやすい
押しにくい
左より右の方が、
上より下の方が押しやすい
始めに|ユーザーインターフェースの設計
7
よく使うボタンが右寄りになるように
下すぎる位置にボタンを配置しない
リストはタップ回数の降順に表示
→見えやすさを重視
ここからレイアウトを
ボタンのタップ回数により
変化させることが目標
始めに|画面レイアウト作成方法
A) LinearLayout
画面部品を縦/横方向に並べて配置
B) ConstraintLayout
画面部品を相対的に配置
C) FrameLayout
画面部品を重ねて配置
8
始めに|LinearLayout
LinearLayout 画面部品を縦/横方向に並べて配置
9
ボタン1
ボタン2
ボタン3
ボタン4
幅や高さなどの設定
設定の記述順に整列
( FrameLayoutは
LinearLayout+部品が重ねられる
というイメージ)
<LinearLayout
…
>
<Button
…
/>
<Button/>
<Button/>
<Button/>
</LinearLayout>
①の設定
②の設定
③の設定
④の設定
XMLの内容 画面の様子
色や背景色等
※簡略化しています
ConstraintLayout 画面部品を相対的に配置
始めに|ConstraintLayout
10
幅や高さなどの設定
<ConstraintLayout
…
>
<Button
…
/>
<Button/>
<Button/>
<Button/>
</ConstraintLayout>
①の設定
②の設定
③の設定
④の設定
XMLの内容 画面の様子
ボタン2の右
ボタン1
ボタン2
ボタン3
ボタン4
記述順に関わらず
ボタンの設定を
書き換えることで
位置を変えられる
ボタン1の左
ボタン4の下
ボタン1の下
※簡略化しています
始めに|画面レイアウト作成方法
A) LinearLayout
画面部品を縦/横方向に並べて配置
B) FrameLayout
画面部品を重ねて配置
C) ConstraintLayout
画面部品を相対的に配置
11
並び順=記述順
あとから画面部品を追加したり
動かすのに適さない
並び順=記述順
あとから画面部品を追加したり
動かすのに適さない
部品の位置関係を変えることで
容易に部品を動かすことが可能
ConstraintLayoutでアプリの見た目を作成
目次
12
1. 概要
2. 始めに
3. タップ回数保存
4. レイアウト変更
5. 動作の様子
6. まとめ
1
5
9
13
18
21
タップ回数保存|データベースのER図
13
視聴済みリスト
作品名
気になるリスト
公開年
制作会社
評価
感想など
俳優名
ジャンル番号
タップ回数
ボタンリスト
ボタンid
タップ回数
俳優リスト
俳優名
登場回数
1-3
1-3
ジャンルリスト
ジャンル番号
ジャンル名
登場回数
タップ回数保存|データベースの接続方法
14
Activityクラス
DB接続
オブジェクト
DB接続
ヘルパークラス
D
B
M
S
DB
結果
SQL
②
要求
生成
DBヘルパークラスを作成する
①
アクティビティでDBヘルパーオブジェクトから
DB接続オブジェクトを取得する
DB接続オブジェクトを使ってSQLを実行
結果を取得
③
タップ回数保存|ボタンタップ時の動作
15
ボタンタップの
検出
要求
DBヘルパーオブジェクト DB接続オブジェクト
生成
タップ回数取得
(SQL作成)
実行 タップ回数
タップ回数+1
旧データの削除
(SQL作成)
実行
新データの挿入
(SQL作成)
実行
目次
16
1. 概要
2. 始めに
3. タップ回数保存
4. レイアウト変更
5. 動作の様子
6. まとめ
1
5
9
13
18
21
レイアウト変更|レイアウトの設定方法
ConstraintLayout
部品のどことどこを繋げるか指定
制約関係
幅や高さを指定
入れ子型で設計可能
17
レイアウト変更|ボタン位置変更の流れ
18
ボタンのタップ回数に応じて制約の繋ぎ直し
19
レイアウト変更|アクティビティのライフサイクル
アクティビティの開始
onCreate() onStart() onResume()
アクティビティが実行中
onDestroy() onStop() onPause()
アクティビティの破棄
プロセスのキル
onRestart()
ユーザの操作で
アクティビティが再び開始
他のアプリが
メモリを要求
アクティビティが
再び表示
アクティビティが再び表示 別のアクティビティ が開始
アクティビティが
非表示
20
レイアウト変更|アクティビティのライフサイクル
アクティビティの開始
onCreate() onStart() onResume()
アクティビティが実行中
onDestroy() onStop() onPause()
アクティビティの破棄
プロセスのキル
onRestart()
ここでボタンの
タップ回数の取得と
制約の繋ぎ直し
ユーザの操作で
アクティビティが再び開始
他のアプリが
メモリを要求
アクティビティが
再び表示
アクティビティが再び表示 別のアクティビティ が開始
アクティビティが
非表示
アプリ開始時
画面の再表示時
レイアウト変更|リストの並べ替え
21
3
2
1
5
count
検索結果を
タップ回数降順で
並べ替えるよう指定
DB接続オブジェクトの取得
リスト内レイアウトの取得
DB検索用カーソルの準備
DB内容とレイアウトの紐づけ
レイアウトに反映
目次
22
1. 概要
2. 始めに
3. タップ回数保存
4. レイアウト変更
5. 動作の様子
6. まとめ
1
5
9
13
18
21
23
目次
24
1. 概要
2. 始めに
3. タップ回数保存
4. レイアウト変更
5. 動作の様子
6. まとめ
1
5
9
13
18
21
まとめ|気づいたこと
使いやすさとは
• ボタンが押しやすい位置に来ることで特定のボタンを速く押せるようになった
• 削除・並び替え・絞り込みボタンの位置が変わると逆に使いづらい
• 持ち方によってはボタンが右下に来ると使いづらいことも
• 見えやすさと使いやすさの共存の難しさ
25
Android Studioについて
• コードの補完機能や修正機能が充実している
• 初心者にも使いやすいというわけではないが
ユーザーのことを考えられている
まとめ|改善点
26
ボタンのタップ履歴
101 201 201 203 204 103 103 103
・・・
ボタンレイアウトの決定
他の持ち方にも対応させる
履歴からボタンレイアウトを考える
まとめ|終わりに
27
プロジェクト研究で ボタンのレイアウトが使用者によって
最適化されるようなアプリの作成 をした
使用頻度の高いボタンが押しやすい位置に動くようにすることができた
他にも…
• 見やすい配色を意識してユーザーインターフェースを考えられた
• Androidアプリの開発方法とKotlinという言語について学ぶことができた
• データベースの授業で習ったことを実践できた
しかし
• もう少し滑らかな動き方を実現させる
• 他の持ち方に対応させる
• 趣味管理アプリとしての機能を完成させる ことができなかった

More Related Content

Similar to 使う人によってレイアウトを最適化するAndroidアプリ

PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料Monaca
 
App inventor for bussiness
App inventor for bussinessApp inventor for bussiness
App inventor for bussinessTakeaki Tada
 
2画面折り畳みデバイスのアプリ開発について
2画面折り畳みデバイスのアプリ開発について2画面折り畳みデバイスのアプリ開発について
2画面折り畳みデバイスのアプリ開発についてShinya Nakajima
 
Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)Kenichi Kambara
 
保守性の高いアプリケーション設計について
保守性の高いアプリケーション設計について保守性の高いアプリケーション設計について
保守性の高いアプリケーション設計についてTomomitsuKusaba
 
C#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouchC#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouchShin Ise
 
タブレットでわくわくプログラミング体験(公開版)
タブレットでわくわくプログラミング体験(公開版)タブレットでわくわくプログラミング体験(公開版)
タブレットでわくわくプログラミング体験(公開版)Kazuhiro Abe
 
浪江町ハッカソンインプットセミナー20140621
浪江町ハッカソンインプットセミナー20140621浪江町ハッカソンインプットセミナー20140621
浪江町ハッカソンインプットセミナー20140621Satoshi Maeda
 
AndroidアプリのUI/UX改善例
AndroidアプリのUI/UX改善例AndroidアプリのUI/UX改善例
AndroidアプリのUI/UX改善例Kenichi Kambara
 
スマートフォンアプリ開発におけるディレクション
スマートフォンアプリ開発におけるディレクションスマートフォンアプリ開発におけるディレクション
スマートフォンアプリ開発におけるディレクションGIG inc.
 
Swiftビギナーズ勉強会 第9回 BluePrint/BluePrintViewerで作るアプリモックアップ 
Swiftビギナーズ勉強会 第9回 BluePrint/BluePrintViewerで作るアプリモックアップ Swiftビギナーズ勉強会 第9回 BluePrint/BluePrintViewerで作るアプリモックアップ 
Swiftビギナーズ勉強会 第9回 BluePrint/BluePrintViewerで作るアプリモックアップ Kuniyoshi Takenaka
 
「プログラム名を指定して実行」という名のランチャーアプリ
「プログラム名を指定して実行」という名のランチャーアプリ「プログラム名を指定して実行」という名のランチャーアプリ
「プログラム名を指定して実行」という名のランチャーアプリtomohiroimaizumi
 
TKG Beacon開発
TKG Beacon開発TKG Beacon開発
TKG Beacon開発Aokiti
 
"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm
"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm
"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcmShingo Hiraya
 
ニコニコ学会 Ubi camera-edit_umt_03
ニコニコ学会 Ubi camera-edit_umt_03ニコニコ学会 Ubi camera-edit_umt_03
ニコニコ学会 Ubi camera-edit_umt_03Furuyoshikun
 
自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ
自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ
自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ典子 松本
 
スマホアプリの開発手法をまとめてみた。
スマホアプリの開発手法をまとめてみた。スマホアプリの開発手法をまとめてみた。
スマホアプリの開発手法をまとめてみた。Hiroshi Goto
 
App inventorで想いを形に
App inventorで想いを形にApp inventorで想いを形に
App inventorで想いを形にTakeaki Tada
 
Cod2012 デバッグ講座
Cod2012 デバッグ講座Cod2012 デバッグ講座
Cod2012 デバッグ講座Masuda Tomoaki
 

Similar to 使う人によってレイアウトを最適化するAndroidアプリ (20)

PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料
 
App inventor for bussiness
App inventor for bussinessApp inventor for bussiness
App inventor for bussiness
 
2画面折り畳みデバイスのアプリ開発について
2画面折り畳みデバイスのアプリ開発について2画面折り畳みデバイスのアプリ開発について
2画面折り畳みデバイスのアプリ開発について
 
Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)
 
保守性の高いアプリケーション設計について
保守性の高いアプリケーション設計について保守性の高いアプリケーション設計について
保守性の高いアプリケーション設計について
 
C#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouchC#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouch
 
タブレットでわくわくプログラミング体験(公開版)
タブレットでわくわくプログラミング体験(公開版)タブレットでわくわくプログラミング体験(公開版)
タブレットでわくわくプログラミング体験(公開版)
 
浪江町ハッカソンインプットセミナー20140621
浪江町ハッカソンインプットセミナー20140621浪江町ハッカソンインプットセミナー20140621
浪江町ハッカソンインプットセミナー20140621
 
AndroidアプリのUI/UX改善例
AndroidアプリのUI/UX改善例AndroidアプリのUI/UX改善例
AndroidアプリのUI/UX改善例
 
スマートフォンアプリ開発におけるディレクション
スマートフォンアプリ開発におけるディレクションスマートフォンアプリ開発におけるディレクション
スマートフォンアプリ開発におけるディレクション
 
Swiftビギナーズ勉強会 第9回 BluePrint/BluePrintViewerで作るアプリモックアップ 
Swiftビギナーズ勉強会 第9回 BluePrint/BluePrintViewerで作るアプリモックアップ Swiftビギナーズ勉強会 第9回 BluePrint/BluePrintViewerで作るアプリモックアップ 
Swiftビギナーズ勉強会 第9回 BluePrint/BluePrintViewerで作るアプリモックアップ 
 
「プログラム名を指定して実行」という名のランチャーアプリ
「プログラム名を指定して実行」という名のランチャーアプリ「プログラム名を指定して実行」という名のランチャーアプリ
「プログラム名を指定して実行」という名のランチャーアプリ
 
TKG Beacon開発
TKG Beacon開発TKG Beacon開発
TKG Beacon開発
 
Androidアプリ開発
Androidアプリ開発Androidアプリ開発
Androidアプリ開発
 
"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm
"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm
"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm
 
ニコニコ学会 Ubi camera-edit_umt_03
ニコニコ学会 Ubi camera-edit_umt_03ニコニコ学会 Ubi camera-edit_umt_03
ニコニコ学会 Ubi camera-edit_umt_03
 
自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ
自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ
自社でつくれる生産性向上ツール 必要だと思ったらすぐに作れるビジネスアプリ
 
スマホアプリの開発手法をまとめてみた。
スマホアプリの開発手法をまとめてみた。スマホアプリの開発手法をまとめてみた。
スマホアプリの開発手法をまとめてみた。
 
App inventorで想いを形に
App inventorで想いを形にApp inventorで想いを形に
App inventorで想いを形に
 
Cod2012 デバッグ講座
Cod2012 デバッグ講座Cod2012 デバッグ講座
Cod2012 デバッグ講座
 

使う人によってレイアウトを最適化するAndroidアプリ

Editor's Notes

  1. 早稲田大学基幹理工学部情報理工…近藤智美です。 今回のプロジェクト研究のテーマは使いやすいソフトウェアの開発ということで、使う人によってレイアウトが最適化されるAndroidアプリの開発を行いました。
  2. 今回の発表はこのような流れで まずはプロジェクト研究で行ったことの概要を発表し、開発の流れをお話しして、最後に動作の様子、そしてまとめという流れで発表します。
  3. 私の回りにはパソコンやスマートフォン操作が苦手な人が多い →使いやすいソフトウェアを作りたい そうはいっても人によって使いやすいの定義は異なり、具体的に定義しづらいが、先生に助言をいただきスマートフォンには押しやすい位置と押しにくい位置があるということに着目した ボタンが押しにくいところにあると使いづらい…
  4. 自分のスマートフォンがAndroidなので、今回はAndroid StudioというIDEとKotlinというAndroid開発推奨言語を用いて 自分の趣味がドラマ鑑賞なので
  5. 押しやすい位置よく使うボタンが来るアプリケーションを開発するということでしたが、 よく使うボタンはタップ回数が多いボタンと仮定し、このようなプログラムの流れで考えた
  6. それでは、先ほどのプログラムの流れを実現させる前の、アプリの枠組みを作るまでについて話します
  7. 先ほどもお話ししたように、スマートフォンには押しやすい位置と押しにくい位置があり、その特定から始めました 持ち方によっても違ってくると思うが私はこの持ち方なので、このように左より右の方が…という結果になった
  8. この話を踏まえて、ユーザーインターフェースの設計をした よく使う… 先ほどの話だと上より下の方が押しやすいが、人間の目は大体上にあるものから見るので、見えやすさを… ユーザーインターフェースの設計を行った後、レイアウトをボタンの…を目標に開発を進めた
  9. レイアウトはXMLという、言語で作成、大きな枠組みを用意しその中にボタンなどの部品を置いていくイメージ 外側の箱には何種類かレイアウトの枠組みの方法がある Liner, Constraint, Frame…
  10. LinearLayout(リニアレイアウト)は画面部品を…するレイアウト方法です。 このようにタグを用いて部品の記述をし、幅や高さ、色や背景などを設定しますが、 リニアレイアウトでは記述した順に部品が縦横に並びます。 FrameLayoutはリニアレイアウトと似ているのですが、部品が重ねられるという特徴があります。
  11. ConstraintLayoutは画面部品を…するレイアウト方法です。 Constraintレイアウトではどの部品の上下左右に配置するかなどと記述して位置関係を設定するため、 記述順に関わらずボタンの設定を書き換えることで位置を変えられます。
  12. 以上の特徴を踏まえ、リニアレイアウトやFrameLayoutは今回の開発には適さないと考え ConstraintLayout…
  13. レイアウトをタップ回数に応じて変更したいということで、タップ回数を保存する機能の実装について
  14. タップ回数やドラマのリストに表示されるデータを保存しなければならない このように設計した
  15. Androidアプリでのデータベース接続方法について説明します DBヘルパークラスを作成する データベースのテーブル作成用SQL文字の作成・実行 アクティビティでDBヘルパーオブジェクトを作り、そこからDB接続オブジェクトを取得する アクティビティというのは画面ごとに存在していて、その画面でどんな動作をするか記述している DB接続オブジェクトを使ってSQLを実行、結果を取得 ※ SQL = RDBを記述し操作するのに用いられる主要なプログラミング言語
  16. それではボタンがタップされたときの動作についてお話します ボタンのタップが検出されたらDBヘルパーオブジェクトにDB接続オブジェクトを生成するよう要求 タップ回数を取り出すためにSQL文を作成し、DB接続オブジェクトを介して取り出し タップ回数+1 古いデータを削除するSQLを作成して実行 新データを挿入するためにSQLを作成して実行
  17. タップ回数を保存する機能がつけられたので、いよいよレイアウトを変更していきます
  18. スライド11ページでも話したように、大きな外側の箱はConstraint…にしてボタンの位置を設定する Constraint…では部品の…これを制約関係という 例えばここではこれのこことこれのここを… 幅や高さ…その他にも背景色やテキストサイズ、テキストカラーを設定
  19. レイアウトを変更する具体例を紹介します 例えば視聴済み>気になるになったら 黄色の線でつながっているがこれを切り、このようにつなぎ直します これをプログラムのどの段階で行うかについて次のスライドで
  20. Androidアプリにはアクティビティのライフサイクルというものがあり このような順に関数が実行されていきます
  21. 例えばアプリ開始時は onCreate->…Resume(リズーム・再開) 画面の再表示(ほかのページから戻ってきたときなど) どちらも通る場所でレイアウトの変更を行うべきー>onResumeで
  22. 最後にリストをタップした回数が多い順に上から並べる方法です。 データベースの中身とリスト内の部品を紐づけるためにこのようなステップを踏む必要があるのですが、 DB内容とレイアウトの紐づけの際に必要なカーソルを用意する際に、SQL文でタップ回数の降順にDBを回るよう 指定することで実現できた カーソル=表の中の一行を特定する道具
  23. それでは動作の様子をお見せしたいと思います
  24. データベースにドラマの内容を登録する機能やリストをタップした回数を保存する機能を実装できていない &思った通りの動きをさせるためにDBを自分のPCで作成し、エミュレータにアップロードしました【再生】 リストやドラマの詳細表示の際に画像を載せたかったが、実現できなかった
  25. ホーム画面は3つしかボタンがないのでボタンが移動すると使いやすい しかし視聴済みリストの下の削除…ボタンは見た目が同じなので 今回開発したアプリは同じ持ち方をしている人にとってしか押しやすくならない 他の持ち方だと… 今回のプロジェクト研究の本題とはずれるのですが、
  26. タップ回数順だと昔はよく使っていたが最近は使っていないボタンが出てきたときに、そのボタンがずっと押しやすい位置に居座る可能性が コンピュータアーキテクチャで習った、プログラムが条件分岐するときにストールが発生しないように分岐予測をする方法を参考にして、タップ回数ではなくタップ履歴からレイアウトを考えられるかも アプリ起動時に持ち方を選択して、ボタンの動き方を変える
  27. 一気にレイアウトが変わる もう少し滑らかな動き方でレイアウトを変えること アプリを完全に完成させることができなかった