詳細未調査ですが、こうしたら変わりましたというお話です。
まぁある意味当たり前なのかもですが、APIレベルが高い場合は全くもって問題なかったのですが
API22でネットで記載されていた方法にて、TabLayoutのテキストサイズを変更しみたのですが
何やっても変わらない><
SpannableStringでなくViewGroupからTextViewを取り出す方法など本当にいろいろ試したんですがうまくいかず、、、
最後のさいごでうまくいったのが、TabLayoutのカスタムクラスを作成した方法。
iOSほどandroidに馴染みがないのであれですが、推測としてはapp側のテーマによる制限など、別の仕組みが優先されてたのかなと勝手に解釈。
Androidマスターの方のご意見聞きたいです。
APIレベル22でも動いたのはこちら。CustomTabLayoutです。
class CustomTabLayout : TabLayout {
constructor(context: Context) : super(context) {
init(context, null)
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
init(context, attrs)
}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
init(context, attrs)
}
private fun init(context: Context, attrs: AttributeSet?) {
this.addOnTabSelectedListener(object: OnTabSelectedListener {
private val normal = AbsoluteSizeSpan(context.resources.getInteger(R.integer.tab_font_small), true)
private val large = AbsoluteSizeSpan(context.resources.getInteger(R.integer.tab_font_large), true)
override fun onTabSelected(tab: TabLayout.Tab) {
tab?.also {
it.text?.also { text ->
val spanText = if(text is SpannableString) text else SpannableString(text)
spanText.removeSpan(normal)
spanText.setSpan(
large,
0,
text.length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
it.text = spanText
}
}
}
override fun onTabUnselected(tab: Tab) {
tab?.also {
it.text?.also { text ->
val spanText = if (text is SpannableString) text else SpannableString(text)
spanText.removeSpan(large)
spanText.setSpan(
normal,
0,
text.length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
it.text = spanText
}
}
}
override fun onTabReselected(tab: Tab) {}
})
}
}