Androidのユーザインタフェース今昔 ①

今日も試験対策勉強やっていきましょう。
2013年1月出版の「アプリケーション技術者認定試験ベーシック対策実践問題集改訂版」を解きながら、現在との変更点に言及していきます。
本当に勉強になっているのかは知らない。

まあせっかくアウトプットしているので、間違えとかあったら教えてください。

メニュー

問1 ListViewなどで要素を長押しすることで表示されるメニューはどれ

コンテキストメニュー
「メニュー」ってちょっとざっくりしていますが、要するにAndroidがクラスとかXMLとかを提供しているメニューUIの総称と考えていいでしょうか。
現在Androidが基本的なタイプとして用意しているのはオプションメニューとコンテキストメニューとAndroid3.0以降で追加されたポップアップメニューの三種類。そのうち、コンテキストメニューは「ユーザーが要素を長押しクリックするときに表示されるフローティングメニュー」なのでこれが正解。
ところで、この問題集の解説ではオプションメニューとコンテキストメニューの二つのみ紹介されているのですが、Tipsという形でポップアップメニューが追加されています。まあ、Android3.0になったころに改訂されたんでしょう。ただ、2016年12月出版の本でもAndroidで利用できるのはオプションメニューとコンテキストメニューの二つ、と紹介されているのですが、ポップアップメニューの位置づけってどういう状態なんでしょう。わからん。

問2 MENUボタン押下時に表示されるメニューを作成する際にオーバーライドするクラスはどれ

onCreateOptionMenu
Menuボタンってそもそも「・・・」を縦にしたようなあれですかね?
正解はonCreatePptionMenu。今も現役で使えますが、3.0以降は専用のMenuボタンを表示する必要はなくなりました。その代わりに使えるものとしてActionButtonとOverflowButtonが用意されたそうです。この辺は別途フォローしなければ。

問3 オプションメニューのレイアウト定義を行うXMLの記述で正しいものはどれ(メニューに表示するアイテムのタグ名を選ぶ問題)

item
メニューに表示するアイテムは"item"タグで定義するんですね。書いたことあれば何となく見たことあるはず。
最近書いたから今も現役なはず。

問4 menuボタン押下の度にメニューの内容を更新したい場合にオーバーライドするメソッドはどれ

onPrepareOptionMenu
メニューボタンが初回に押されたときは、まずonCreateOptionMenuが呼ばれ続いてonPrepareOptionMenuがよばれます。
二回目以降はonCreateOptionMenuは呼ばれないそうなので、メニュー内容を動的に変化させる場合はこちらを使う必要があるそうな。
でもこれ、検索してもこのメソッドに関して直接言及してるページは全く引っ掛からないんですよね。不審に思ってAndroidDevelopers内で検索かけたんですが、No Resultだそうです。きな臭ーい

問5 メニューを表示するためのコードで正しいものはどれ

public boolean onCreateOptionMenu(Menu menu) {
    super.onCreateOptionMenu(menu);
    menu.add("EDIT").setIcon(R.drawable.ic_edit);
    // ...
    return true;
}

この問題は紹介しにくいですな。アプリの画面の画像があってこれを実装するコードを選べという問題なのですが、著作権とかの観点と、あと何より面倒くさいので画像とかはあんま載せないので口頭で。
メニューにテキストとアイコンを表示するのに使うメソッドはどれか。それぞれ"add"と"setIcon"ですね。
addは"android.view.Menu"インタフェースのメソッドであるのに対し、SetIconは"android.view.MenuItem"インタフェースのメソッド。ただ、addはMenuItemオブジェクトを返すので、そのまま続けて.SetIconできるんですって。ほう。

ダイアログ

ダイアログってのはボタンクリックなどのイベントに反応してポップアップする小さな画面のことだそうです。この問題集では、「警告表示用のダイアログと進捗状況表示用のダイアログをサポート」している、とありますが、日付/時刻を選択するダイアログ、"DatePickerDialog / TimePickerDialog"なんてものもあるそうなので、この辺りは別途フォローする必要がありそうです。

問1 Activityでダイアログを扱う方法として正しいものはどれ

Activityが管理するダイアログを表示するメソッドを呼び出すと、毎回onPrepareDialogが呼び出される。
onPrepareDialogもdevelopersで検索して出てこなかったのでこれもちょっと怪しい。
ダイアログで検索すると、たいていFragmentを使って表示する方法が出てくるのですが、この章ではFragmentについて全く言及されていません。Fragment自体は3.0から実装されているそうなので、この本の出版時期にはあったはずなのですが。別途勉強しておくのがよさそうですね。

問2 AlertDialogを表示する手順として正しいものはどれ

タイトルやボタンなどを設定するメソッドはBuilderオブジェクトを返すため、連続して呼び出すことができる。
Buiderを使ってアラートを設定するのはどうやら今も現役の方法みたいですね。

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
    .setTitle("タイトル")
    .setMessage("メッセージ")
    .setPositiveButton("はい", listener)
    .setNegativeButton("いいえ", listener)
    .setNeutralButton("キャンセル", listener)
    .create().show();

こんな感じでBuilderオブジェクトを生成してsetTitleとかで要素埋め込んでいくんですって。このときそれぞれのメソッドがBuilderオブジェクトを返すので、連続で呼び出せるねっていう問題でした。

問3 AlertDialogに設定可能な要素と設定するメソッドの組み合わせで正しいものはどれ。

選択可能なリスト : setItems*
先ほどの例のsetTitleやsetMessageのように様々な要素をダイアログ上に表示させることができるみたいです。
この問題集で挙げられているのは他に、ボタン(setPositiveButton,setNegativeButtonなど様々なボタンに対応したメソッドがある)、ラジオボタン(setSingleChoiceItems)、チェックボックス(setMultiChoiceItems)。
他にsetIconができたり、setViewでviewを別に用意してカスタムビューを表示したりもできるらしい。

問4 AlertDialogに自分で作成したレイアウトを表示さるコードとして正しいのはどれ

AlertDialog.Builder builder = new AlertDilog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();

builder.setView(inflater.inflate(R.id.dialog_layout,null))
    .setTitle("タイトル")

実際は"setView"と"inflate"の部分を穴埋めで答える問題でした。setViewはさっき言ってたやつですね!
一方、もう片っぽですが、LayoutInflaterはinflateメソッドでidを指定したxmlのレイアウトから動的にviewを作ることができるそうです。setViewの引数はViewなので、findViewByIdでレイアウトのidを渡すだけじゃダメなんですねー

問5 ProgressDialogの記述で誤っているものはどれ

xmlで定義したレイアウトをsetViewメソッドにより適用できる。
ProgressDialogは待ち時間の進捗を表示するダイアログ。ひな形が作られてるんであれやこれや設定するだけで簡単に使えるんですね。逆にProgressDialogはスタイルによってレイアウトが決定されるので独自のレイアウトを設定することはできないそうです。なのでこの選択肢は間違い。
他の選択肢にも言及しておきますと、まずProgressDialog.setStyle()でスタイルが設定できます。(STYLE_HORIZONTALとSTYLE_SPINNERの二種)
また、incrementSecondaryProgressByメソッドでプログレスバーの中間の進捗状況を示すセカンダリプログレスバーを表示できるし、setIndeterminateメソッドで現在値の表示を切り替える(~%完了みたいなのを表示させる)ことができるそうです。  
 
 
今日はここまで。次回はUI➁やりまーす。

Androidのシステムアーキテクチャ今昔

早くも一か月ぶりになってしまいましたが。二回目です。
圧倒的コンテンツ不足です。  

問題集を4冊も(中古で)揃えたというのにどいつもこいつも記事が古すぎる・・・
アウトプットもくそもねぇ!
このブログ、見切り発進もいいところでしたね。

でもそんなことは言っていられないから(会社の評価がかかっているから)何か書く。

Androidアプリケーション技術者認定試験ベーシック」対策本の決定版

f:id:tu21themouth:20170926222721j:plain

2013年1月初版Androidアプリケーション技術者認定試験対策委員会著の対策問題集です。
私が買った本の中では一番新しく、最も信用できる本です。この本で出題されている問を片っ端から解いて調べて、今と昔で仕様が変わっている部分をまとめていこうと思います。 とりあえず。 勉強になるのか知らないですけど!

全文写したらなんかの権利に引っ掛かりそうなんで要点だけかいつまんで書きますね。

システムアーキテクチャ概要

問1 Androidアーキテクチャで正しいのはどれ

AndroidJavaで利用可能な機能の多くをサポートしている。
まあこれはいいでしょう。そうそう変わらないでほしい。

問2 Dalvik仮想マシンとして正しいのはどれ

Apache Harmonyのサブセットを基に開発されている。
そもそもAndroidランタイムはAndroid 5.0以降DalvikからARTに置き換えられたそうです。ぶっちゃけDalvik聞いたこともありませんでした。今も現役なのな?まだ出題されるのかな?
Dalvikではアプリ起動の度にバイトコードからネイティブコードに変換していたそうですが、ARTはインストール時に変換する事前コンパイルをしてくれるらしい。
詳しくは後で調べよ

問3 コアライブラリの記述として正しいのはどれ

Java互換のライブラリとAndroid独自のライブラリを含む。
C/C++でも記述されているんですね。へぇ これはどうやら今も変わっていないようです。多分

問4 Androidアーキテクチャに含まれるライブラリに関して正しいのはどれ

WebKitは、Webページの表示などをサポートするブラウザエンジンである。
ほかの選択肢のMedia Framework(オーディオとかビデオとか操作するエンジン)、Free Type(フォントのライブラリ)、SGL(2Dグラフィックエンジン)もすべて現役みたいですね。あんまり変わらないものなんでしょうか。 Media Frameworkは名前のわりにライブラリに属するのね。わかりにく

問5 アプリケーションフレームワークに分類されないものはどれ

SurfaceManager
SurfaceManagerは名前はフレームワークっぽいけどライブラリの一種っていうひっかけなんですって
それよりも、この本に載ってるTelephony Manager(電話機能の管理をするフレームワーク)が別の2016年12月出版のAndroidの本で紹介されていないのが気になる。developers見ると普通に紹介されてるし今でも現役っぽいけどなんでだろ・・・
保留

問6 アプリケーションフレームワークの説明として正しいのはどれ

Content Providersは、アプリケーション間で共有するデータを管理する。
ContentProviderってAndroidの4大要素に数えられるんですってね。まぁ4大要素で検索しても古い記事しか出てこないのだけど。

問7 Androidアプリケーションのファイル形式はどれ

apkファイル
そういえばapkファイルってどこに作られてるんだろ
まだapkファイルとして扱ったことが無かったのでよく知りませんでしたわ。調べとこ。

問8 Androidアプリケーションの実行に関して正しいものはどれ

アンドロイドアプリケーションは、基本的に個別の仮想マシン上で実行される。
基本的にはプラットフォームの違いを吸収すべくJava仮想マシン上で動くそうなので、この選択肢は今でもあってる?
ただ、2014年11月アップデート後のLollipop以降、スマートフォンでもユーザーアカウントを複数設定して切り替えて使えるマルチユーザー機能を利用することができるようになったそうなので、この設問の解説にある「端末上のアプリケーションにはそれぞれ個別にLinuxユーザIDが割り当てられ、別々のユーザとして動作します。」っていう記述に疑問が残る。
判断がつかない・・・ これもまた別個で調べなきゃ・・・

問9 AndroidのバージョンとAPIレベルの記述で正しいものはどれ

Androidの各バージョンは、一つのAPIレベルに対応している。
この辺は命名規則みたいなもんですかね。そうそう変わるもんでもなさそう。
2017年9月現在の最新APIレベルは26ですがこの本が書かれたころは17だそうです。
新しい要素も増えたでしょうな。

問10 Androidアプリケーションを構成する要素に含まれないものはどれ

Binder
なんかあいまいな問題ね。要するにアプリケーションコンポーネントのことらしい。 コンポーネントはActivity、Service、ContentProvider、BroadcastReceiverの四つで、Binderはアプリケーション間のプロセス間通信を実現するドライバなのでコンポーネントではないそうです。この辺も今も健在。

ライセンス形態

問1 Androidの大部分が採用しているライセンスはどれか

Apache Software License 2.0 wikiによるとApache License 2.0に準じるため、Androidを採用した企業・個人が改変部や付加部分をGPLのように公開する必要はないそうです。ただし、WebKitのライセンスはLGPLLinuxのライセンスはGPLと別なので公開が求められるのだとか。
テストに出そう!

問2 Androidのライセンス形態に関する記述で正しいものはどれ

Androidで開発したアプリケーションは、ソースコードを公開しなくてもライセンス違反にはならない。
さっそく出た!!!

問3 AndroidLinuxカーネル部分を改変して商用として利用する場合の条件はどれ

改変したソースコードは公開の義務が発生する。
これも!!!
LinuxカーネルGPLに引っ掛かるのでこうなるんですねー
お仕事として扱う身としてはこういうことちゃんと知っていかねば

第1章おわり

ふぅ。 システムアーキテクチャは今もそのまま使われてる部分が多いみたいで、変な問題は少なかったでしょうか。
ていうか今更だけどこの本が出版された以降のバージョンアップで変更された以外に増えた部分も別途フォローしないとテスト対策にならないですね。
にどでま!!!!
次回は第2章ユーザインタフェースやりまーす

androidアプリケーション技術者認定試験をご存知ですか

Androidの勉強始めました。

初めまして
今年度から社会人になりました。 近藤と申します。

大学では少しだけC言語を学んだものの、本格的にプログラミングを勉強したことはないというのにソフトウェアとかを作ってる会社に入れていただくことになりました。
最近は、androidアプリケーションのプログラミングを勉強しております。

入社させていただいてもう少しで半年といったところになりますが、まだまだ何の役にも立てず、力のなさを実感しながら悶々と過ごす日々を送っております。
(まあ、新入社員というのはそういうものな気もしますが・・・)

しかし、これではいかん。新人だからといって甘えてばかりもいられませんので、(お金をもらう立場になってしまいましたし)
はやく一人前になるためにならなければなりませんね。

さて、勉強のモチベーションを上げるために何か明確な目標でも、と思っているのですが。 皆様、Androidアプリケーション技術者認定試験というものをご存知でしょうか?
なんか「android 資格」でググったら上のほうに出てきた androidアプリケーション技術者のための資格試験です。

Android™技術者認定試験制度委員会はそのスキルを客観的に評価できる基準として、スキルを認定する公的な試験を実施しています。 それがAndroid™技術者認定試験制度です。この試験は日本のみならず、全世界160カ国に配信されており、日本語、英語、繁体中国語での受験が可能です。

(公式HPより)

パッと見た感じ、おあつらえ向きな感じがいたしますね。
ちょうど良さそうなので、このブログではandroidアプリケーション技術者認定試験ベーシックの合格を目指し、それに向けて学んだことや勉強の仕方などを発信していきましょう。

Android技術者認定試験

さて、このブログのテーマに(浅はかにも)掲げたAndroid技術者認定試験なのですが、いったいどのような資格試験なのか、敵を知ることは大事です。

Android開発技術力を証明してくれる

Android技術者認定試験は、スキルを客観的に評価できる基準として、2010年に発足しました。
現在は一般社団法人IT職業能力支援機構Android技術者認定試験制度委員会が運営しています。
試験のレベルとしては、経産省が定めるITスキル標準を基にすると、基本情報と応用情報の間ぐらい。これからAndroidアプリでプロになろうという時に受けるにはちょうど良いのではないでしょうか。
IoTが騒がれる昨今、スマートフォンに留まらず、様々な機器に搭載されているAndroidの技術力を裏付けてくれるというのは、とてもありがたい話でございますね。
ちなみに2016年9月時点で全世界で5,500人の受験者数を抱えるそうです。ちょっと少ない気がしますね!

アプリケーションとプラットフォーム技術者の二種類ある

Androidの技術者さんにもアプリ層を学ぶ人と中間層を学ぶ人とでは必要な知識も変わってくるのでしょう。android技術者認定試験は、アプリケーション技術者認定試験とプラットフォーム技術者認定試験の二種類が用意されています。これはありがたいですね!私が今主に学んでいるのはアプリ層のお話なので、私が受験するべきはアプリケーション技術者認定試験の方でしょうか。
そして、それぞれにベーシックとプロフェッショナルの二種類レベルが用意されており、計4種類の試験があるそうです。
ただ、現在プロフェッショナルレベルは準備中なのだとか。プロフェッショナルレベルは、"2012年夏以降に実施を予定している。"らしいですね。一気にきな臭いですよ!

豊富な学習教材

公式サイトでは、試験対策の学習方法もフォローしてくれていました。
androidアプリケーション技術者認定試験公式の対策問題集などが7冊紹介されている他、すき間の時間でコツコツ勉強できるようなアプリケーション版問題集などは無料で公開されているようです。
なるほど、充実した勉強方法があって、しっかり試験対策ができそうですね!
早速amazonで書籍を検索してみました。いくつか見てみましたが、新しいものでも2013年出版ですって。ほとんどの本が¥1で買えたので、さっそく4冊そろえてみました(笑)

とはいえ

正直、この試験大丈夫なのかな、という気がしてきました・・・。
でも、やるって言ってしまったんです。会社にも、言ってしまったのです。(目標立てないといけないんです。)
あまり更新されていなくて情報が古かったり、(試験範囲にeclipseとか書いてある)
思ったほど受験者数がいなくて人気がなさそうだったりときな臭さは拭えませんが、
さすがに今実施されている試験が今の環境に即していない、なんてことは無いでしょう。たぶん。
充実の参考書たち()も、今と昔の差を埋めていくという形で、非効率かもしれませんが勉強することはできます。(過去のバージョンを知るってのも一つ大事なことかと。)
何より勉強のモチベーションを上げるという目標は達成できそうです。
すでに少しずつ、書籍の問題や公式の模擬試験を解いてみたりしているので、学んだことや、勉強の仕方で思ったことなど、今後アウトプットしていけたらよいと思います。