LoginSignup
19
9

More than 5 years have passed since last update.

はじめに

Bison改め南里です。
筋トレアドベントカレンダー、完全に失念していました。遅れてすみません。。。
学生の頃から筋トレが好きでよく筋トレをしていました。
ただ、今は筋トレよりは、怪我をしない強靭な体づくりに集中しています。
高校でバスケを引退してからも大学のサークル、また社会人になってからも週一程度でバスケをしていたのですが、大きな怪我をしたからです。
ですので、ファンクショナルトレーニングが日課です。
なんか筋トレアドベントカレンダーなので何か言わなきゃと意味のないことを語ってしまいました。
早速参りましょう。

Androidについて

本日はAndroid周りの知識について話したいと思います。
Android開発においての鬼門はOSの後方互換性だと思います。
ご自身で実装し、以下のような処理をすることは多々あると思います。

back_compatible_support.kt
fun getHoge() = if (Build.VERSION.SDK_INT > 19) {
    // hogehoge
} else {
    // fugafuga
}

めんどくさいですよね。
IDEが警告出してくれるとはいえ、忘れてしまうこともあるのではないでしょうか?(default warningなので)
ただ、Androidでは上記のような後方互換性を意識したHelperたちが存在します。
車輪の再開発にならないように、積極的にAndroid SDKが提供する便利なAPIたちを利用していきましょう。

ContextCompat

Colorリソースの参照

color_resource.kt
val color = ContextCompat.getColor(context, android.R.color.white)
textView.setTextColor(color)

各権限周りの確認

permission.kt
// permissionは文字配列でpermissionを入れる
val checkSelfPermission = ContextCompat.checkSelfPermission(context, permission)
when (checkSelfPermission) {
    PackageManager.PERMISSION_DENIED -> {
        // permission denied
    }
    PackageManager.PERMISSION_GRANTED -> {
        // permission granted
    }
    else -> {
        // hogefuga
    }
}

DrawableCompat

Drawableリソースの参照

drawable_resource.kt
val drawable = DrawableCompat.wrap(ContextCompat.getDrawable(context, drawableResId))

ViewCompat

ViewのBackgroundリソースの設定

view_background.kt
val drawable = DrawableCompat.wrap(ContextCompat.getDrawable(context, drawableResId))
ViewCompat.setBackground(view, drawable);

IntentCompat

該当Intent候補の作成

intent_compat.kt
startActivity(IntentCompat.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_LAUNCHER))

指定のActionとCategoryに該当するAppを以下のように選択肢として表示できます。

NotificationCompat

通知設定

notification.kt
val builder = NotificationCompat.Builder(context, channelId)
            .setSmallIcon(R.drawable.ic_launcher)

以上は後方互換性を意識したAPIたちでしたが、他にも簡単に便利なUtilsたちを紹介しておきます。

TextUtils

文字列チェック

TextUtils.kt
// 空 or Nullであることのチェック
TextUtils.isEmpty(string)

// 文字列自体の同値 or 同等
TextUtils.equals(stringA, stringB)

Uri.Builder

URI作成

uri_builder.kt
val uri = Uri.Builder().scheme("scheme")
        .authority("authority")
        .path("path")
        .appendQueryParameter("nickname", "bison")
uri.build()

// output is 'scheme://authority/path?nickname=bison'

DiffUtils

RecyclerViewの差分更新

update_item.kt
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があれば、教えて下さい。
それではよいお年を。

19
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
9