按钮上的阴影颜色取决于XML中的状态 - Android

时间:2011-02-17 07:46:46

标签: android xml button

我在Android中创建了自定义ToggleButtons,因为所有按钮都继承自相同的xml,我想根据状态更改它们的行为方式,所以当检查状态时我想改变阴影颜色但是这似乎没有可以使用当前的SDK。

我创建了一个xml文件,其中包含button_colors:

<?xml version="1.0" encoding="utf-8"?>
<selector
   xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:state_checked="true"
    android:color="#FFFFFF"  />

<item
    android:color="#000000" />
 </selector>

但这似乎只适用于文字颜色,而不是文字上的阴影颜色。 有什么我想念的吗? 而不是在代码中手动为每个按钮执行此操作,因为我希望将其应用于应用程序中的每个按钮。

更新编辑:

我的选择器目前看起来像这样

<selector
xmlns:android="http://schemas.android.com/apk/res/android">

<item
    android:state_checked="true"
    android:drawable="@drawable/button_gradient_selected" />

<item
    android:drawable="@drawable/button_gradient" />

</selector>

但正如我在下面的评论员中提到的那样,我似乎无法从这里改变样式/文字颜色阴影,因为它似乎只能用于绘制。

当我尝试在此处的按钮上添加不同的样式时,它会强制关闭或根据状态不改变样式。当我只尝试在这里放置样式并且在样式中设置drawable它强制关闭。无论哪种方式,它似乎都不起作用。

4 个答案:

答案 0 :(得分:8)

似乎Android框架不支持此功能。

来自TextView.java:

        case com.android.internal.R.styleable.TextView_textColor:
            textColor = a.getColorStateList(attr);
            break;

        case com.android.internal.R.styleable.TextView_shadowColor:
            shadowcolor = a.getInt(attr, 0);
            break;

他们对textColor和shadowColor的处理方式不同。

答案 1 :(得分:3)

请参阅我在其他StackOverFlow问题上的解决方案。我延长了TextView以提供有效的解决方案here。 (将TextView替换为Button)

答案 2 :(得分:-1)

这是您必须实现的选择器文件:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_checked="false" android:drawable="@drawable/btn_toggle_off" /> 
  <item android:state_checked="true" android:drawable="@drawable/btn_toggle_on" /> 
  </selector>

这些是用于默认ToggleButton的图片: btn_toggle_onbtn_toogle_off

答案 3 :(得分:-2)

您可以使用阴影颜色的选择器,如下所示:color_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:dither="true">
    <item 
        android:state_pressed="true"
        android:color="@color/btn_text_on" />
    <item 
        android:state_focused="true"
        android:color="@color/btn_text_on" />
    <item
        android:color="@color/btn_text_off" />        
</selector>

然后使用此选择器,同时在styles.xml中设置按钮的样式,如下所示:

<style name="ButtonStyle">
<item name="android:textColor">#FF383C48</item>
    <item name="android:textSize">12sp</item>
    <item name="android:shadowColor">@drawable/color_selector</item>
    <item name="android:shadowDx">0</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">1</item>
    <item name="android:typeface">sans</item>
    <item name="android:textStyle">bold</item>
</style>