BETA

使えそうな拡張関数

投稿日:2018-12-11
最終更新:2019-01-08

便利そうな拡張関数をメモってく

Context

Toast周り

fun Context.showToast(message: String, duration: Int = Toast.LENGTH_SHORT) =  
        Toast.makeText(this, message, duration).show()  

fun Context.showToast(@StringRes res: Int, duration: Int = Toast.LENGTH_SHORT) =  
        Toast.makeText(this, res, duration).show()

dp, px変換

fun Context.convertDpToPx(dp: Int): Float = dp * resources.displayMetrics.density  

fun Context.convertPxToDp(px: Int): Float = px / resources.displayMetrics.density

Intent周り

// インテントを作成  
inline fun <reified T : Context> Context.newIntent(): Intent = Intent(this, T::class.java)  

// Bundle付き  
inline fun <reified T : Context> Context.newIntent(extras: Bundle): Intent = newIntent<T>().also { it.putExtras(extras) }  

// パラメータ無し  
inline fun <reified T : Context> Context.newIntentActivity() = startActivity(newIntent<T>())  

// パラメータ無し  
inline fun <reified T : Context> Context.newIntentActivity(extras: Bundle) = startActivity(newIntent<T>(extras))

Activity

Permission系

// 権限が許可されているか  
fun Activity.checkPermission(permissions: Array<String>): Boolean {  
    for (permission in permissions) {  
        if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED){  
            return false  
        }  
    }  
    return true  
}  

// 権限の要求  
fun Activity.requestPermission(permissions: Array<String>, requestCode: Int) =  
        ActivityCompat.requestPermissions(this, permissions, requestCode)

FragmentManager

フラグメントの切り替え

fun FragmentManager.replaceFragment(resource: Int, fragment: Fragment, tag: String? = null) = this.beginTransaction().replace(resource, fragment, tag).commit()

Int

時間表現

fun Int.seconds(): Int = this * 1000  
fun Int.minutes(): Int = this.seconds() * 60  
fun Int.hours(): Int = this.minutes() * 60  
fun Int.days(): Int = this.hours() * 24

String

Dateに変換

// : mm : は、Qrunchのエディタ上で繋げると絵文字になるのでスペース入れて対処  
fun String.convertDate(pattern: String = "yyyy-MM-dd HH: mm :ss"): Date {  
    val sdf = try {  
        SimpleDateFormat(pattern, Locale.JAPAN)  
    } catch (e: IllegalArgumentException) {  
        e.printstacktrace()  
    }  
    return sdf?.let {  
        try {  
            it.parse(this)  
        } catch (e: ParseException) {  
            e.printstacktrace()  
        }  
    }  
}

Boolean変換

fun String?.castBoolean(): Boolean =  
    when(this) {  
        "0", "false", null -> false  
        "1", "true" -> true  
        else -> throw Exception("can't cast string")   
    }

HTMLタグ付き文字列をパースして返す

TextViewでHTMLタグ付き文字列を有効化する時に使用

fun String.parseHtmlTag(): Spanned {  
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {  
        Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY)  
    } else {  
        Html.fromHtml(this)  
    }  
}  

// Example  
val textview = findViewById(R.id.text_view) as TextView  
textview.text = "hoge<br>fuga<br><font color=\"#00FF00\">hogefuga</font>"

Date

Date -> String変換

fun Date.convertString(pattern: String = "yyyy-MM-dd HH: mm :ss"): String {  
    val sdf = try {  
        SimpleDateFormat(pattern, Locale.JAPAN)  
    } catch (e: IllegalArgumentException) {  
        e.printstacktrace()  
    }  
    return sdf?.format(this)  
}
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@kichinagaの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう