android的边框颜色样式,Android复选框样式

注意:使用Android支持库v22.1.0并定位到API级别11或更高版本吗? 向下滚动到最新更新。

我的应用程序样式设置为Theme.Holo,它很暗,我会 就像我的列表视图上的复选框是Theme.Holo.Light样式。 我不是要创建自定义样式。 下面的代码似乎没有 工作,什么都没有发生。

乍一看,为什么系统会表现出这种行为可能并不明显,但是当您实际研究机械原理时,您可以轻松推断出它。 让我逐步引导您。

首先,让我们看一下Widget.Holo.Light.CompoundButton.CheckBox样式的定义。 为了使事情更清楚,我还添加了“常规”(非轻型)样式定义。

如您所见,这两个都是空声明,只是将CheckBox用另一个名称包装。 因此,让我们看一下父样式。

@android:drawable/btn_check_label_background

?android:attr/listChoiceIndicatorMultiple

此样式同时引用了背景和按钮可绘制。 CheckBox仅仅是9个补丁,因此就此而言不是很有趣。 但是,android:theme指示基于当前主题的某些属性(这对实现很重要)将确定app:theme的实际外观。

由于CheckBox是主题属性,因此您会找到多个声明-每个主题一个(如果从父主题继承而则没有一个)。 如下所示(为清楚起见,省略了其他属性):

@android:drawable/btn_check

...

@android:drawable/btn_check_holo_dark

...

@android:drawable/btn_check_holo_light

...

因此,真正的魔力发生了:根据主题的CheckBox属性,确定android:theme的实际外观。 现在可以轻松地解释您所看到的现象:由于外观是基于主题的(而不是基于样式的,因为这只是一个空的定义),并且您是从app:theme继承的,因此您将始终获得与Holo.Light相匹配的外观 主题。

现在,如果要将CheckBox的外观更改为Holo.Light版本,则需要复制这些资源,将它们添加到本地资产中,并使用自定义样式来应用它们。

至于第二个问题:

如果您为应用程序设置样式,还可以为各个小部件设置样式吗?

绝对如此,它们将覆盖任何活动或应用程序设置的样式。

有什么办法可以将主题(带有图像的样式)设置为复选框 小部件。 (...)反正有使用此选择器的链接吗?

更新:

让我再次开始说,您不应该依赖Android的内部资源。 您不能随意访问内部名称空间是有原因的。

但是,毕竟,访问系统资源的一种方法是按名称进行id查找。 考虑以下代码片段:

int id = Resources.getSystem().getIdentifier("btn_check_holo_light", "drawable", "android");

((CheckBox) findViewById(R.id.checkbox)).setButtonDrawable(id);

第一行实际上将返回CheckBox可绘制资源的资源ID。 由于我们之前确定这是确定android:theme外观的按钮选择器,因此我们可以在小部件上将其设置为“可绘制按钮”。 结果是app:theme具有Holo.Light版本的外观,无论您在xml中的应用程序,活动或窗口小部件上设置了什么主题/样式。 由于这仅设置可绘制的按钮,因此您将需要手动更改其他样式。 例如 关于文字外观。

屏幕截图下方显示了结果。 顶部的复选框使用上述方法(我在xml中手动将文本颜色设置为黑色),而第二个复选框使用了基于主题的默认样式CheckBox256(非轻型)。

0683bf1949e3b0e2376e6b45e2daeaf0.png

更新2:

随着支持库v22.1.0的引入,事情变得更加容易了! 发行说明中的一句话(我的重点):

Lollipop添加了使用CheckBox XML属性在逐个视图级别覆盖主题的功能-对于诸如轻活动上的黑暗操作栏之类的东西非常有用。 现在,AppCompat允许您将android:theme用于工具栏(不赞成使用以前使用的app:theme),甚至更好的是,为API 11+设备上的所有视图带来了CheckBox支持。

换句话说:您现在可以基于每个视图应用主题,这使得解决原始问题变得容易得多:只需指定您想要为相关视图应用的主题即可。 即 在原始问题的上下文中,比较以下结果:

...

android:theme="@android:style/Theme.Holo" />

...

android:theme="@android:style/Theme.Holo.Light" />

无论您为活动或应用程序设置了什么实际主题,第一个CheckBox的样式都好像在深色主题中使用,第二个样式似乎在浅色主题中使用。

当然,您不应再使用Holo主题,而应使用Material。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值