最近在用TabLayout实现数字小红点时,在调用orCreateBadge方法时
mDataBind.tabLayout.getTabAt(mViewModel.defaultSelectPos)?.let {
it.orCreateBadge.apply {
backgroundColor = ContextCompat.getColor(this@OrderActivity, R.color.red_FF)
maxCharacterCount = 3
number = mViewModel.addDishNumArray[mViewModel.defaultSelectPos]
badgeTextColor = ContextCompat.getColor(this@OrderActivity, R.color.white)
}
}
报了一个错:
iava.lang.unsupportedoperationExceptionFailed to resolve attribute at index 3:TypedValueft=0x2/d=0x7f0300fa a=4}
at android.content.res.TypedArray.getcolorstatelist(IypedArray.java:546)
at com.google.android.maaterialResources.getcolorstateList(MaterialResources.java:81)
at com.google.android.material.resources.TextAppearance.<init>(TextAppearance.java:86)
at com.google.android.material.badge.Badgestate.<init>(Badgestate.java:216)
at com.google.android.material.badge.BadgeDrawable.<init>(BadgeDrawable.iava:285)
at com.google.android.material.badge.BadpeDrawable.create(BadgeDrawable.java:216)
at com.google.android.materiateBadpe(TabLavout.iava:2904)[ablavout.iava:2531)at com.google.android.material.at com.google.android.materialabLavout.iava:2383)
仔细看报错原因是因为无法解析某个属性而导致的报错,一刚开始以为是gradle或者material库的版本问题导致的,酷酷一顿改,结果改了个寂寞。实际原因是在使用material的某些属性或api时一定要配套使用他们推荐的主题,否则就会报错。
解决办法:将AndroidManifest.xml文件中的主题样式改成MaterialComponents主题中的其中某个样式就行。如:将android:theme="@style/Theme.AppCompat.Light.NoActionBar"改成android:theme="@style/Theme.MaterialComponents.Light.NoActionBar",就能正常运行了。