Android的supportV7中默认按钮的颜色设置

我们知道,在styles.xml文件里面可以设置主题,在主题中设置的一些颜色,将会应用到默认的AppCompat控件上,从而很简单的就可以保持整个APP在UI上的一致性。下面是一个例子:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">

    <item name="colorPrimary">@color/colorPrimary</item>
    <!-- 状态栏颜色 -->
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>

    <!--按钮选中或者点击获得焦点后的颜色-->
    <item name="colorAccent">@color/colorAccent</item>

    <!--控制searchView的icon颜色的设置-->
    <item name="colorControlNormal">@color/colorControlNormal</item>
    <!--Button按钮正常状态颜色-->
    <item name="colorButtonNormal">@color/accent_material_light</item>
    <!--EditText 输入框中字体的颜色-->
    <item name="editTextColor">@android:color/white</item>
    <!-- 窗口的背景颜色 -->
    <item name="android:windowBackground">@android:color/white</item>
    <!--导航栏上的标题颜色-->
    <item name="android:textColorPrimary">@color/black</item>

    <item name="android:listDivider">@drawable/card_list_divider</item>

    <item name="textAppearanceLargePopupMenu">@style/splashPopUpMenuStyle</item>
    <item name="textAppearanceSmallPopupMenu">@style/splashPopUpMenuStyle</item>

</style>

至于各种控件是如何应用这些颜色设置的,则需要经过更多的尝试了。
比如Activity导航栏默认的图标颜色是colorControlNormal,导航栏的底色是colorPrimary,沉浸式状态栏默认的颜色是colorPrimaryDark;
比如FAB的默认颜色是colorAccent;
比如AppCompatCheckBox默认的选中状态的颜色是colorAccent,而默认的未选择状态的颜色的colorControlNormal;
比如AppCompatSpinner的下拉图标的默认颜色也是colorControlNormal。
……

其实涉及到的主要的就是下面这几个参数:

<item name="colorPrimary">?attr/colorPrimary</item>
<item name="colorPrimaryDark">?attr/colorPrimaryDark</item>
<item name="colorAccent">?attr/colorAccent</item>
<item name="colorControlNormal">?attr/colorControlNormal</item>
<item name="colorControlActivated">?attr/colorControlActivated</item>
<item name="colorControlHighlight">?attr/colorControlHighlight</item>
<item name="colorButtonNormal">?attr/colorButtonNormal</item>

那么问题来了,如果你使用蓝色的沉浸式状态栏,导航栏上的图标则使用白色,那在这个Activity中使用AppCompatCheckBox的时候,未选择状态就也是白色的,此时如果在白色的背景色下,用户就看不出这是个AppCompatCheckBox了。这时候怎么办?如下图(图中使用的是AppCompatSpinner):

颜色不正确

其实很简单,在这个AppCompatCheckBox上使用app:theme=”@style/MyCheckBox”,然后在styles.xml中添加新的

<style name="MyCheckBox" parent="Widget.AppCompat.CompoundButton.CheckBox">
    <item name="colorControlNormal">@color/colorControlNormal</item>
</style>

但是需要注意的是,这样可能引起控件其他默认属性的变化,比如CheckBox的textSize会变成1(不使用app:theme的时候和APP的默认字体大小一样)。

使用了app.theme之后

参考:
[android:theme和app:popupTheme的作用,以及在android 3.0以下不起作用问题的解决](http://blog.csdn.net/lovexieyuan520/article/details/48931185)

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值