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

Posted

技术标签:

【中文标题】按钮上的阴影颜色取决于 XML 中的状态 - Android【英文标题】:Shadow color on buttons depending on state in XML - Android 【发布时间】:2011-06-28 22:02:38 【问题描述】:

我在 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>

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

当我尝试在此处的按钮上设置不同的样式时,它会强制关闭或不根据状态更改样式。当我只尝试在此处输入样式并将可绘制对象设置为强制关闭的样式时。无论哪种方式,它似乎都不起作用。

【问题讨论】:

How to add shadow to TextView on selection/focus 的可能重复项 【参考方案1】:

好像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你是对的,这不是应该在android框架中实现的 让我们为 code.google.com/p/android/issues/detail?id=17689 加注星标并推动完成。【参考方案2】:

请参阅我关于另一个 *** 问题的解决方案。我扩展了TextView 以提供一个可行的解决方案here。 (将TextView替换为Button)

【讨论】:

【参考方案3】:

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

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

这些是用于默认切换按钮的图片: btn_toggle_on 和 btn_toogle_off

【讨论】:

感谢您的回答,但这不是答案,因为可绘制对象不能仅更改背景可绘制对象的阴影颜色。根据developer.android.com/guide/topics/resources/…,您应该使用单独的颜色选择器,但这似乎不适用于阴影。我已经有一个选择可绘制的 XML,但不知道如何从那里更改阴影颜色或样式。 @Joakim Engstrom:我认为我没有正确理解您。你能发布你的活动截图吗?那我就受不了了。【参考方案4】:

你可以有一个阴影颜色的选择器,像这样: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>

然后在 style.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>

【讨论】:

以上是关于按钮上的阴影颜色取决于 XML 中的状态 - Android的主要内容,如果未能解决你的问题,请参考以下文章

ThemeData 在哪里存储阴影颜色?

输入类型=按钮上的背景颜色:IE 中的悬停状态

Android更改材质高程阴影颜色

删除按钮 android studio 上的阴影

[原创]c# wpf自定义 任意颜色阴影特效融合winform的探索之路

Android 按钮上的边框颜色