无法使用android:style/Widget.Holo.Light.CompoundButton.Switch的解决办法咨询
嘿,这个问题我太熟了!你碰到的Error:(15) error: resource android:style/Widget.Holo.Light.CompoundButton.Switch is private,本质是因为这个Holo风格的Switch样式是Android系统的私有资源,系统不允许第三方应用直接引用私有资源,所以才会抛出这个错误。
既然你确实想要这个样式的效果,最稳妥的解决办法是把这个私有样式的代码复制到你自己的项目中,自定义一个等效样式来使用,具体操作步骤如下:
步骤1:复制Holo Light Switch的原始样式代码
这个私有样式的核心定义在Android源码里是公开可查的,你可以直接把这段代码搬到自己项目的样式文件中:
<style name="Widget.Holo.Light.CompoundButton.Switch" parent="Widget.CompoundButton.Switch"> <item name="track">@android:drawable/switch_track_holo_light</item> <item name="thumb">@android:drawable/switch_inner_holo_light</item> <item name="switchMinWidth">72dip</item> <item name="switchPadding">16dip</item> <item name="switchTextAppearance">@android:style/TextAppearance.Holo.Small</item> <item name="textOn">@android:string/capital_on</item> <item name="textOff">@android:string/capital_off</item> <item name="thumbTextPadding">12dip</item> <item name="switchTypeface">monospace</item> <item name="switchTypefaceStyle">normal</item> </style>
步骤2:调整为自定义样式
把上面的代码粘贴到你项目的res/values/styles.xml中,然后修改样式名称为你自己的(比如MyCustomHoloLightSwitch),同时检查资源引用:
- 像
@android:drawable/switch_track_holo_light这类系统drawable,如果你的minSdkVersion≥14,是可以直接引用的;如果版本更低,你需要把对应的drawable文件从Android SDK的platforms/android-X/data/res/drawable-xxx目录里复制到自己项目的res目录下。
修改后的示例样式:
<style name="MyCustomHoloLightSwitch" parent="Widget.CompoundButton.Switch"> <item name="track">@android:drawable/switch_track_holo_light</item> <item name="thumb">@android:drawable/switch_inner_holo_light</item> <item name="switchMinWidth">72dip</item> <item name="switchPadding">16dip</item> <item name="switchTextAppearance">@android:style/TextAppearance.Holo.Small</item> <item name="textOn">@android:string/capital_on</item> <item name="textOff">@android:string/capital_off</item> <item name="thumbTextPadding">12dip</item> <item name="switchTypeface">monospace</item> <item name="switchTypefaceStyle">normal</item> </style>
步骤3:使用自定义样式
之后你就可以在布局文件的Switch控件里引用这个自定义样式了:
<Switch android:id="@+id/my_switch" android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/MyCustomHoloLightSwitch" />
小提示:如果你的应用目标SDK版本比较新,也可以考虑迁移到Material Design风格的Switch,但如果确实需要Holo风格的效果,上面的方法是最可靠的,不会因为系统版本更新出现兼容性问题。
内容的提问来源于stack exchange,提问作者Mxwan
相关产品推荐
相关产品推荐

