XML中根据状态设置按钮阴影颜色 - Android

11

我在Android中创建了自定义的ToggleButtons,由于所有按钮都继承自相同的xml,我想根据状态更改它们的行为,因此当状态被选中时,我想更改阴影颜色,但是当前的SDK似乎不支持这种操作。

我创建了一个包含button_colors的xml文件:

<?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>

但是正如我向下面的评论者提到的,似乎我无法从这里更改样式/文本颜色/阴影,因为它似乎只能接受一个可绘制对象。

当我尝试在这里放置不同的样式时,它会强制关闭或者根据状态不改变样式。当我只尝试在这里放入样式并且让可绘制的对象在样式中设置时,它会强制关闭。无论哪种方式,似乎都不起作用。


可能是 如何在TextView被选中/聚焦时添加阴影 的重复问题。 - Jeremy
4个回答

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的处理方式不同。

@juku 你说得对,这在安卓框架中并没有按照应有的方式实现。 - Gordon Freeman
让我们开始 http://code.google.com/p/android/issues/detail?id=17689 并推动完成它。 - Sebastian Roth

3
请参考我对不同的StackOverFlow问题提出的解决方案。我扩展了TextView以提供一个工作解决方案,具体内容请点此查看。(将TextView替换为Button)

-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


1
谢谢您的回答,但这不是答案,因为可绘制对象无法更改阴影颜色,只能更改背景可绘制对象。根据http://developer.android.com/guide/topics/resources/color-list-resource.html,您应该为颜色使用单独的选择器,但似乎不适用于阴影。我已经有一个选择可绘制对象的XML文件,但无法弄清如何从中更改阴影颜色或样式。 - Joakim Engstrom
@Joakim Engstrom:我觉得我没有正确地理解你。你能发布一下你的活动截屏吗?那样我就能明白了。 - Praveen

-3

您可以像这样为阴影颜色设置选择器: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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接