如何自定义Android Studio Material Slider样式 解决颜色不变及闪退问题
问题1:运行闪退解决方案
错误原因是你错误地将Widget类型的控件样式赋值给了android:theme属性,android:theme要求接收继承自Theme.AppCompat/Theme.MaterialComponents的主题类样式,而非单独的控件样式。同时需要保证你的应用全局、对应Activity、BottomSheetDialog使用的主题是AppCompat或MaterialComponents主题的子类。
修正步骤:
- 把你当前给Slider加的
android:theme="@style/SliderTheme"删掉,改成用style="@style/SliderTheme",style属性才是用来指定控件样式的属性。 - 确认你的
AndroidManifest.xml里Application节点、对应Activity节点的android:theme属性值是继承自Theme.MaterialComponents或者Theme.AppCompat的主题,比如常用的Theme.MaterialComponents.DayNight.NoActionBar。如果你的应用原有主题是AppCompat系列,不想全量切换到MaterialComponents主题,可以改用带.Bridge后缀的MaterialComponents主题,比如Theme.MaterialComponents.DayNight.NoActionBar.Bridge,既保留原有AppCompat主题配置,又能正常使用Material Components控件。 - 如果你是手动创建BottomSheetDialog实例,不要用ApplicationContext作为上下文,要用当前Activity的上下文,保证上下文携带正确的主题。
问题2:Slider样式不生效解决方案
你原来的样式属性写法是对的,只需要把样式从android:theme换到style属性就能生效,如果你需要更稳定的兼容效果,也可以给样式内的属性加上app:前缀:
<style name="SliderTheme" parent="Widget.MaterialComponents.Slider"> <item name="app:trackColorActive">#238ae6</item> <item name="app:trackColorInactive">#a7bada</item> <item name="app:tickColor">#13161d</item> <item name="app:thumbColor">#238ae6</item> </style>
修正后的Slider代码如下:
<com.google.android.material.slider.Slider android:id="@+id/settingsMission_changeShakeDif_slider" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="20dp" android:layout_marginEnd="20dp" android:stepSize="20.0" style="@style/SliderTheme" android:valueFrom="0.0" android:valueTo="40.0" app:labelBehavior="gone" />
如果还有部分颜色不生效,可以检查你的全局主题里有没有覆盖colorSecondary属性,Slider默认会取用主题的colorSecondary作为激活色,优先级低于控件单独设置的样式属性。
内容的提问来源于stack exchange,提问作者Croissant
相关产品推荐
相关产品推荐

