はじめに
Bison改め南里です。
筋トレアドベントカレンダー、完全に失念していました。遅れてすみません。。。
学生の頃から筋トレが好きでよく筋トレをしていました。
ただ、今は筋トレよりは、怪我をしない強靭な体づくりに集中しています。
高校でバスケを引退してからも大学のサークル、また社会人になってからも週一程度でバスケをしていたのですが、大きな怪我をしたからです。
ですので、ファンクショナルトレーニングが日課です。
なんか筋トレアドベントカレンダーなので何か言わなきゃと意味のないことを語ってしまいました。
早速参りましょう。
Androidについて
本日はAndroid周りの知識について話したいと思います。
Android開発においての鬼門はOSの後方互換性だと思います。
ご自身で実装し、以下のような処理をすることは多々あると思います。
fun getHoge() = if (Build.VERSION.SDK_INT > 19) {
// hogehoge
} else {
// fugafuga
}
めんどくさいですよね。
IDEが警告出してくれるとはいえ、忘れてしまうこともあるのではないでしょうか?(default warningなので)
ただ、Androidでは上記のような後方互換性を意識したHelperたちが存在します。
車輪の再開発にならないように、積極的にAndroid SDKが提供する便利なAPIたちを利用していきましょう。
ContextCompat
Colorリソースの参照
val color = ContextCompat.getColor(context, android.R.color.white)
textView.setTextColor(color)
各権限周りの確認
// permissionは文字配列でpermissionを入れる
val checkSelfPermission = ContextCompat.checkSelfPermission(context, permission)
when (checkSelfPermission) {
PackageManager.PERMISSION_DENIED -> {
// permission denied
}
PackageManager.PERMISSION_GRANTED -> {
// permission granted
}
else -> {
// hogefuga
}
}
DrawableCompat
Drawableリソースの参照
val drawable = DrawableCompat.wrap(ContextCompat.getDrawable(context, drawableResId))
ViewCompat
ViewのBackgroundリソースの設定
val drawable = DrawableCompat.wrap(ContextCompat.getDrawable(context, drawableResId))
ViewCompat.setBackground(view, drawable);
IntentCompat
該当Intent候補の作成
startActivity(IntentCompat.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_LAUNCHER))
指定のActionとCategoryに該当するAppを以下のように選択肢として表示できます。
NotificationCompat
通知設定
val builder = NotificationCompat.Builder(context, channelId)
.setSmallIcon(R.drawable.ic_launcher)
以上は後方互換性を意識したAPIたちでしたが、他にも簡単に便利なUtilsたちを紹介しておきます。
TextUtils
文字列チェック
// 空 or Nullであることのチェック
TextUtils.isEmpty(string)
// 文字列自体の同値 or 同等
TextUtils.equals(stringA, stringB)
Uri.Builder
URI作成
val uri = Uri.Builder().scheme("scheme")
.authority("authority")
.path("path")
.appendQueryParameter("nickname", "bison")
uri.build()
// output is 'scheme://authority/path?nickname=bison'
DiffUtils
RecyclerViewの差分更新
val diff = DiffUtil.calculateDiff(object : DiffUtil.Callback() {
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int) = oldItems[oldItemPosition].id == newItems[newItemPosition].id
override fun getOldListSize() = oldItems.size
override fun getNewListSize() = newItems.size
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int) = oldItems[oldItemPosition] == newItems[newItemPosition]
})
diff.dispatchUpdatesTo(adapter)
最後に
簡単ですが、よく使う機能たちを並べてみました。
他に便利なfunctionがあれば、教えて下さい。
それではよいお年を。