Android_Kotlin 「初めてのAndroidプログラミング」chapter11章
この本のサンプル
0.画面の作成
ここでは、画像を背景画像として画面全体に反映させている。
imageViewにはscaleType
というものがある。
どうやら基本的に使用するものは3つでFIT_CENTER
,CENTER_CROP
,FIT_XY
っぽい。(今回使用したのはCENTER_CROP)
FIT_CENTERは、切り取られることなく画面全体が表示される。
CENTER_CROPは、画面いっぱいにリサイズされる。その分切り取られ る。
FIT_XYは、画面いっぱいにリサイズされる。切り取られることはないが縦横の比率を考慮せずに拡大・縮小して表示される。
雑談:MarkDown記法で記述する場合[f:id:xxxx:2015yyyyyyy:plain:w300]
と書いてあげれば画像がリサイズできる。
1.アラーム処理のプログラム
このアラームのアプリは将来のある時点で処理Aが実行される(アラームを鳴らすなど)
この場合、AlarManager
,BroadcastReceiver
の2つが必要になる。
ブロードキャストとは、設定した時刻での処理実行(Androidシステムに非同期に発生する)イベントの情報を送る仕組み。
役割としては、
AlarmMager
は、ブロードキャストするインテントと、ブロードキャストする時刻を設定してくれる。
BroadcastReceiver
は、インテントや情報などを受け取ってくれる。アプリが起動していない場合は自動的に起動してくれる(MainActivityと関わりをもつ)
1.1BroadcastReceiverを継承したクラスの作成
appで右クリック。 new > other > BroadcastReceiverを作成
以下が作成される。(作成したファイル。私の場合はAlarmBroadcaseReceiver.kt)
class AlarmBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { // This method is called when the BroadcastReceiver is receiving an Intent broadcast. TODO("AlarmBroadcastReceiver.onReceive() is not implemented") } }
引数にintent
がある通り、AlarmManagerで設定したintentを引数を取っていることから、BroadcastReceiver#onReceiveはintent取得後に実行される。引数のContext
とintent
はレシーバーのcontextと設定されたintent。(今の所なぜ引数にcontextが渡るのかあまりわからない。。)
改良してメッセージ確認用のToastを記述。
Toast(1.context,2.text,3.duration)
1,使用するcontext(MainActivityのcontext???)
2,表示する内容
3,表示時間(Toast.LENGTH_SHORT / Toast.LENGTH_LONG)
※.show
がないと表示されない場合があるっぽい。x
class AlarmBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { // This method is called when the BroadcastReceiver is receiving an Intent broadcast. Toast.makeText(context,"intent受け取ったよ",Toast.LENGTH_SHORT) //追加 .show() } }
1.2 ブロードキャストインテントの作成
AlarmManagerクラスを使用する(注意:直接インスタンス化してはいけない)
・システムの AlarmService を使うためのクラス
・アプリケーションを将来のあるポイントで起動するようスケジュールできる
PendingIntentを作成する必要がある。
PendingIntentとはIntentを即座に発行せずにタイミングを指定して発行できるインテント(AlarmManagerなど)
1、getBroadcast
メソッドでペディングインテントの作成
2、AlarmClockInfo
,setAlarmClock
でアラームの設定を行う
private fun setAlarmManager(calender:Calendar){ //am = alarmManager val am = getSystemService(Context.ALARM_SERVICE) as AlarmManager //intentの作成 val intent = Intent(this,AlarmBroadcastReceiver::class.java) //ペディングインテントの作成 val pending = PendingIntent.getBroadcast(this,0,intent,0) //1 when{ Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ->{ val info = AlarmManager.AlarmClockInfo(calender.timeInMillis,null) //2 am.setAlarmClock(info,pending) } Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ->{ am.setExact(AlarmManager.RTC_WAKEUP,calender.timeInMillis,pending) } else ->{ am.set(AlarmManager.RTC_WAKEUP,calender.timeInMillis,pending) } } }
1.3 アラームをキャンセルする
3 ダイアログを利用する
Dialog
・DialogFragmentクラスを継承したクラスを作成する(ダイアログ管理クラス。ボタンの挙動制御などが可能)
・onCreateDialogでAlertDialogを作成(最大3つまでボタンを配置できるシンプルなダイアログ作成が可能)
・DialogFragmentクラスを継承したクラスのインスタンスを生成する
・ 処理記述後に.show()
で表示する(なかったら表示されない)
3.1 アラートダイアログとは
3.2 ダイアログを作成する
app/java/pkg名 > new > Kotlin File
3.3 コールバックを用意する
コールバックとは異なるクラス間で通知する仕組み
例)ボタンが押された -> DialogFragmentからActivityへ通知 -> Activityで処理
一旦ここまで。。
参考
[Android]ImageViewのscaleTypeを秒で決める - Qiita