iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【Android】TextInputLayoutにローディングを表示したい

結論

下記のようにContextにExtensionを生やして、システムデフォルトのローディングインジケーターを取得することができます。drawableの生成だけだと、アニメーション化されないため、(drawable as? Animatable)?.start()でアニメーションを開始させています。

fun Context.getProgressBarDrawable(): Drawable {
    val value = TypedValue()
    theme.resolveAttribute(android.R.attr.progressBarStyleSmall, value, false)
    val progressBarStyle = value.data
    val attributes = intArrayOf(android.R.attr.indeterminateDrawable)
    val array = obtainStyledAttributes(progressBarStyle, attributes)
    val drawable = array.getDrawableOrThrow(0)
    array.recycle()
    (drawable as? Animatable)?.start()
    return drawable
}

使い方はこう。

textInputLayout.endIconMode = TextInputLayout.END_ICON_CUSTOM
textInputLayout.endIconDrawable = context?.getProgressBarDrawable()

参考

stackoverflow.com

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com